热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP安全配置(2)

三、PHP本身的安全配置PHP的配置非常机动,可以通过php.ini,httpd.conf,.htaccess文件(该目录必需设置了AllowOverrideAll或Options)进行设置,还可以在脚本程序里应用ini_set()及其他的特定的函
三、PHP本身的安全配置

PHP的配置非常机动,可以通过php.ini, httpd.conf, .htaccess文件(该目录必需设置了AllowOverride All或Options)进行设置,还可以在脚本程序里应用ini_set()及其他的特定的函数进行设置。通过phpinfo()和get_cfg_var()函数可以得到配置选项的各个值。

假如配置选项是唯一PHP_INI_SYSTEM属性的,必需通过php.ini和httpd.conf来修正,它们修正的是PHP的Master值,但修正之后必需重启apache才干生效。其中php.ini设置的选项是对Web服务器所有脚本生效,httpd.conf里设置的选项是对该定义的目录下所有脚本生效。

假如还有其他的PHP_INI_USER, PHP_INI_PERDIR, PHP_INI_ALL属性的选项就可以应用.htaccess文件设置,也可以通过在脚本程序自身用ini_set()函数设定,它们修正的是Local值,改了以后马上生效。但是.htaccess只对当前目录的脚本程序生效,ini_set()函数只对该脚本程序设置ini_set()函数以后的代码生效。各个版本的选项属性可能不尽雷同,可以用如下命令查找当前源代码的main.c文件得到所有的选项,以及它的属性:

# grep PHP_INI_ /PHP_SRC/main/main.c



在讨论PHP安全配置之前,应当好好懂得PHP的safe_mode模式。

1、safe_mode

safe_mode是唯一PHP_INI_SYSTEM属性,必需通过php.ini或httpd.conf来设置。要启用safe_mode,只需修正php.ini:

safe_mode = On
或者修正httpd.conf,定义目录:

Options FollowSymLinks
php_admin_value safe_mode 1




重启apache后safe_mode就生效了。启动safe_mode,会对很多PHP函数进行限制,特别是和系统相干的文件打开、命令履行等函数。

所有把持文件的函数将只能把持与脚本UID雷同的文件,比如test.php脚本的内容为:


几个文件的属性如下:
# ls -la
total 13
drwxr-xr-x 2 root root 104 Jul 20 01:25 .
drwxr-xr-x 16 root root 384 Jul 18 12:02 ..
-rw-r--r-- 1 root root 4110 Oct 26 2002 index.html
-rw-r--r-- 1 www-data www-data 41 Jul 19 19:14 test.php



在浏览器恳求test.php会提示如下的错误信息:

Warning: SAFE MODE Restriction in effect. The script whose uid/gid is 33/33 is not allowed to access ./index.html owned by uid/gid 0/0 in /var/www/test.php on line 1

假如被把持文件所在目录的UID和脚本UID一致,那么该文件的UID即使和脚本不同也可以拜访的,不知这是否是PHP的一个漏洞还是另有隐情。所以php脚本属主这个用户最好就只作这个用处,尽对禁止应用root做为php脚本的属主,这样就达不到safe_mode的后果了。

假如想将其放宽到GID比拟,则打开 safe_mode_gid可以考虑只比拟文件的GID,可以设置如下选项:

safe_mode_gid = On

设置了safe_mode以后,所有命令履行的函数将被限制只能履行php.ini里safe_mode_exec_dir指定目录里的程序,而且shell_exec、`ls -l`这种履行命令的方法会被禁止。假如确实需要调用其它程序,可以在php.ini做如下设置:

safe_mode_exec_dir = /usr/local/php/exec

然后拷贝程序到该目录,那么php脚本就可以用system等函数来履行该程序。而且该目录里的shell脚本还是可以调用其它目录里的系统命令。

safe_mode_include_dir string

当从此目录及其子目录(目录必需在 include_path 中或者用完整路径来包含)包含文件时超出 UID/GID 检查。

从 PHP 4.2.0 开端,本指令可以接收和 include_path 指令类似的作风用分号隔开的路径,而不只是一个目录。

指定的限制实际上是一个前缀,而非一个目录名。这也就是说“safe_mode_include_dir = /dir/incl”将答应拜访“/dir/include”和“/dir/incls”,假如它们存在。假如您盼看将拜访把持在一个指定的目录,那么请在结尾加上一个斜线,例如:“safe_mode_include_dir = /dir/incl/”。

safe_mode_allowed_env_vars string

设置某些环境变量可能是埋伏的安全缺口。本指令包含有一个逗号分隔的前缀列表。在安全模式下,用户只能转变那些名字具有在这里供给的前缀的环境变量。默认情况下,用户只能设置以 PHP_ 开头的环境变量(例如 PHP_FOO = BAR)。

注: 假如本指令为空,PHP 将应用户可以修正任何环境变量!

safe_mode_protected_env_vars string

本指令包含有一个逗号分隔的环境变量的列表,终极用户不能用 putenv() 来转变这些环境变量。甚至在 safe_mode_allowed_env_vars 中设置了答应修正时也不能转变这些变量。

固然safe_mode不是万能的(低版本的PHP可以绕过),但还是强烈建议打开安全模式,在必定程度上能够避免一些未知的攻击。不过启用safe_mode会有很多限制,可能对利用带来影响,所以还需要调剂代码和配置才干和谐。被安全模式限制或屏蔽的函数可以参考PHP手册。

讨论完safe_mode后,下面联合程序代码实际可能呈现的标题讨论如何通过对PHP服务器真个配置来避免呈现的漏洞。

2、变量滥用

PHP默认register_globals = On,对于GET, POST, COOKIE, Environment, Session的变量可以直接注册玉成局变量。它们的注册次序是variables_order = 'EGPCS'(可以通过php.ini修正),同名变量variables_order右边的笼罩左边,所以变量的滥用极易造成程序的混乱。而且脚本程序员往往没有对变量初始化的习惯,像如下的程序片段就极易受到攻击:

//test_1.php
if ($pass == 'hello')
$auth = 1;

if ($auth == 1)
echo 'some important information';
else
echo 'nothing';
?>



攻击者只需用如下的恳求就能绕过检查:

http://victim/test_1.php?auth=1

这固然是一个很弱智的错误,但一些著名的程序也有犯过这种错误,比如phpnuke的远程文件拷贝漏洞:http://www.securityfocus.com/bid/3361

PHP-4.1.0宣布的时候建议封闭register_globals,并供给了7个特别的数组变量来应用各种变量。对于从GET、POST、COOKIE等来的变量并不会直接注册成变量,必需通过数组变量来存取。PHP-4.2.0宣布的时候,php.ini默认配置就是register_globals = Off。这使得程序应用PHP自身初始化的默认值,一般为0,避免了攻击者把持判定变量。

解决方法:

配置文件php.ini设置register_globals = Off。

请求程序员对作为判定的变量在程序最开端初始化一个值。

3、文件打开

极易受攻击的代码片段:

//test_2.php
if (!($str = readfile('$filename'))) {
echo('Could not open file: $filename
\n');
exit;
}
else {
echo $str;
}
?>



由于攻击者可以指定任意的$filename,攻击者用如下的恳求就可以看到/etc/passwd:

http://victim/test_2.php?filename=/etc/passwd

如下恳求可以读php文件本身:

http://victim/test_2.php?filename=test_2.php

PHP中文件打开函数还有fopen(), file()等,假如对文件名变量检查不严就会造成服务器重要文件被拜访读取。

解决方法:

如非特别需要,把php的文件把持限制在web目录里面。以下是修正apache配置文件httpd.conf的一个例子:


php_admin_value open_basedir /usr/local/apache/htdocs




重启apache后,/usr/local/apache/htdocs目录下的PHP脚本就只能把持它自己目录下的文件了,否则PHP就会报错:

Warning: open_basedir restriction in effect.

File is in wrong directory in *** on line xx.

应用safe_mode模式也能避免这种标题,前面已经讨论过了。
推荐阅读
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • PDF内容编辑的两种小方法,你知道怎么操作吗?
    本文介绍了两种PDF内容编辑的方法:迅捷PDF编辑器和Adobe Acrobat DC。使用迅捷PDF编辑器,用户可以通过选择需要更改的文字内容并设置字体形式、大小和颜色来编辑PDF文件。而使用Adobe Acrobat DC,则可以通过在软件中点击编辑来编辑PDF文件。PDF文件的编辑可以帮助办公人员进行文件内容的修改和定制。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • svnWebUI:一款现代化的svn服务端管理软件
    svnWebUI是一款图形化管理服务端Subversion的配置工具,适用于非程序员使用。它解决了svn用户和权限配置繁琐且不便的问题,提供了现代化的web界面,让svn服务端管理变得轻松。演示地址:http://svn.nginxwebui.cn:6060。 ... [详细]
author-avatar
Grace990808
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有