九零登录

[【未通过】] 【未转正】从web安全角度浅谈配置php.ini

[复制链接]
发表于 2016-7-27 17:54:18 | 显示全部楼层 |阅读模式
从web安全的角度来看,正确的配置php.ini是非常有必要的,下面我来介绍几个比较重要的php.ini选项。

1.Register Globals
php.ini的register_globals选项的默认值预设为Off,在4.2版本之前是默认开启的,当 register_globals 的设定为 On 时,程序可以接收来自服务器的各种环境变量,包括表单提交的变量,这是对服务器来讲是非常不安全的,所以我们不能让它注册为全局变量。
register_globals=Off时,服务器端获取数据的时候用$_GET['提交变量的请求值']来获取数据
register_globals=On时,服务端使用POST或者GET提交的变量,都将自动使用全局变量的值来接受值


2.magic_quotes_gpc
magic_quotes_gpc = Off 在php.ini里是默认关闭的,如果它打开后将自动把用户提交对sql的查询语句进行转换,如果设置成ON的话,php会把所有的单引号(“'”),双引号(“"”),反斜杠(“\”)和空字符(NULL)加上反斜杠进行转义,它会影响 HTTP 请求的数据有(GET、POST、Cookies),开启它会提高网站的安全性,当然,您也可以使用 addslashes 来转义提交的 HTTP 请求数据,或者用 stripslashes 来删除转义,我推荐设置为:magic_quotes_gpc = On


3.display_errors
在PHP报错的时候,会返回错误信息,例如文件路径的绝对地址或者当前查询的SQL语句等信息,这些信息返回到前台是很不安全的,推荐设为OFF,让服务器禁止返回错误提示,即display_errors = Off


4. safe_mode
安全模式,用来限制文档的存取、限制环境变量的存取,控制外部程序的执行。启用
安全模式必须设置 php.ini 中的 safe_mode=On

1、在安全模式下包含一些文件
例如:
safe_mode_include_dir = “C:/user/www/include/”
2、限制环境变量的存取
safe_mode_allowed_env_vars = string
指定 PHP 程序可以改变的环境变量的前缀,如:safe_mode_allowed_env_vars = PHP_ , 当这个
选项的值为空时,那么 php 可以改变任何环境变量
safe_mode_protected_env_vars = string
用来指定 php 程序不可改变的环境变量的前缀
3、限制外部程序的执行
safe_mode_exec_dir = string
我推荐不要执行任何程序,可以指向网站主目录,例如
safe_mode_exec_dir = “C:/usr/www”
此选项指定的文件夹路径影响 system、exec、popen、passthru,不影响 shell_exec 和“` `”。
disable_functions = string
不同的函数名称用逗号隔开,此选项不受安全模式影响

5. open_basedir
使用open_basedir选项能够控制PHP脚本只能访问指定的目录,这样能够避免PHP脚本访问不应该访问的文件,一定程度上限制了webshell的危害,我们一般可以设置为只能访问网站目录,如果启用,可以有效的消除本地文件或者远程文件被include()等函数的调用攻击

6. disable_functions
我觉得不希望执行包括system()等在那的能够执行命令的php函数,或者能够查看php信息的phpinfo()等函数,那么我们就可以禁止它们:
disable_functions = system,passthru,exec,shell_exec,popen,phpinfo,escapeshellarg,escapeshellcmd,proc_close,proc_open,dl,show_source,get_cfg_var
如果你要禁止任何文件和目录的操作,那么可以关闭很多文件操作
disable_functions = chdir,chroot,dir,getcwd,opendir,readdir,scandir,fopen,unlink,delete,copy,mkdir,rmdir,rename,file,file_get_contents,fputs,fwrite,chgrp,chmod,chown
以上只是列了部分不叫常用的文件处理函数,你也可以把上面执行命令函数和这个函数结合,就能够抵制大部分的phpshell了。



7. com.allow_dcom
PHP设置在安全模式下(safe_mode),仍旧允许攻击者使用COM()函数来创建系统组件来执行任意命令,我推荐关闭这个函数来防止出现此漏洞,即com.allow_dcom=false,如果涉及到网站功能需要开启这个函数的话,使用COM()函数需要在PHP.ini中配置extension=php_com_dotnet.dll,如果PHP VERSION<5.4.5 则不需要


8.display_errors
建议把display_errors设置为OFF.这样就可以记录错误日志了,同时也要设置错误日志存放的目录,建议根服务器的日志存在一起,也要给用户组写的权限,不然可能写不进去,禁止外部访问


9. expose_php
为了防止黑客获取php的版本信息,可以设置expose_php = Off,这样就防止了http头部泄露了php的版本信息


PS:小白初次来到90sec混,求各位给一票吧^-^


单选投票, 共有 35 人参与投票
您所在的用户组没有投票权限
发表于 2016-7-28 09:33:05 | 显示全部楼层
好像只是一些说明,建议加点料
发表于 2016-7-28 17:36:11 | 显示全部楼层
之前搞php的时候整过,太基础了。但是这也很重要,希望再接再厉,来点干货
 楼主| 发表于 2016-7-30 18:38:01 | 显示全部楼层
ok,多谢指导,我学完php代码审计会再来一波,待会我在写一篇别的

九零

GMT+8, 2026-10-22 14:11

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表