快捷搜索:   nginx

Linux下Apache与PHP安全相关设置(3)

unlink,mkdir,touch,fgets,popen,proc_open,link,symlink,phpinfo

建议: 应兼顾到商业服务的完整性和安全性,请酌情考虑是否禁止使用它们.

请注意: disable_functions选项不能在php.ini文件外部使用,也就是说您无法在httpd.conf
文件中按不同虚拟主机或不同目录的方式来屏蔽或者开启函式。
================================================================================

================================================================================
5) register_globals: 禁止注册全局变量;
——————————————————————————–

register_globals = On        (自动注册为全局变量)
register_globals = Off        (不可注册为全局变量)

一般情况下,用户都是在HTML网页里通过HTTP协议,来提交GET,POST和COOKIE数据(简称为GPC)
的. 而PHP程序如何获得用户提交的这些变量数据,则还需依赖于php.ini配置中一个有争议的
设置,即是register_globals参数来决定.

顾名思义,register_globals的意思就是注册为全局变量, 所以当设置为On的时候, 通过页面
传递过来的值就会被直接的注册为全局变量,可以很方便地提供给PHP程序直接使用;而当设置
为Off的时候,PHP程序要使用网页传递过来的变数,就需要到特定的数组里才能得到它.

在PHP4.3.0以后,register_globals默认情况下被设置为Off; 但是几年前,register_globals
的默认值还是打开的,所以现在依然还存在很多需要启用它的程序代码.

请注意: 当设置为 register_globals = Off 之后,不仅会影响到PHP如何获取从

的URL
所传递过来的数据,也会影响到PHP获取session和cookie的方式. 当关闭register_globals时,
PHP程序就必须使用相应的数组来获取session和cookie(例如$_SESSION[]和$_COOKIE). 同时
对于session的处理也有一些改变,比如使用session_register()就显得再也没有必要了,而且
会失效(关于具体的变化请查看PHP手册页的Session handling functions文档之描述).

启用register_globals本身并无安全风险,但是它为跟踪用户输入和确保应用程序安全增加了
难度. 因为一旦打开了register_globals,那么在全局名称空间和$_GET,$_POST或$_COOKIE的
数组中,将会自动创建GET,POST和COOKIE传递到PHP脚本的所有变量. 如果您的PHP程序利用了
这些变量来作安全标识(例如很多程序员喜欢用COOKIE值来辨别用户身份),那么任何人都可以
用通过URL所传递的数值来获取并假冒用户身份,显然这就不再具备安全性了.

另外,一些粗枝大叶或没有责任心的程序员所写的PHP代码, 例如: ,
也很可能让黑客或恶意使用者有机可乘,使他们得以利用register_globals的弱点来进行诸如
代码注入或内存溢位等方式的攻击,从而很轻易地造成系统性的灾难.

重要提示: 自PHP4.2.0起,PHP中的选项register_globals的默认值被设为off了,PHP社区鼓励
大家不要依赖于这个选项,而用其它方法来替代,例如superglobals。

在Apache的httpd.conf中VirtualHost的相应设置方法:

php_admin_flag register_globals on
或者:
php_admin_value register_globals 1

================================================================================

================================================================================
6) magic_quotes_gpc: 令敏感字元转义
——————————————————————————–

magic_quotes_gpc = On
magic_quotes_gpc = Off

magic_quotes_gpc选项是php中的一个重要的安全设置, 当该选项为ON, 也就是打开的时候,
所有从GET,POST,COOKIE传递过来的数据之中的特殊字元(如’”等),以及NULL等元字符都会
被自动的加上以实现转义,这个选项使得SQL注入或者插入代码,以及XSS中引入字符串或者
改变程序流程变得更加困难。

在php.ini配置文件中是默认启用magic_quotes_gpc设置(即为On)的,这相当于自动对所提交
的GET,POST,COOKIE数据使用了addslashes()函数. 如果网站空间关闭了 magic_quotes_gpc
设置, 那么PHP就不会在敏感字元前加上反斜杠(), 即允许表单所提交的内容含有敏感字元,
例如单引号(’)等等, 这就更容易让黑客或者恶意使用者有机会利用SQL的注入漏洞发动攻击.
当然现在很多具备安全意识的程序员或数据库管理员都懂得如何防范SQL注入攻击,他们通常
会在相应的程序代码或应用环境中加强安全防范, 但是无论如何, 在系统层级加强安全防范,
始终都应该是LINUX系统管理员的不二责任.

请注意: PHP程序代码中关于敏感字元的处理,可以用addslashes()来自动在敏感字元前添加
反斜杠, 也可以用函数stripslashes()来去掉反斜线. 另外, 许多数据库本身也提供了针对
这种输入数据的处理功能. 例如在PHP版本的MySQL操作函数中, 就有一个调用数据库来处理
输入数据的函数: mysql_real_escape_string(); 它可将特殊字符以及可能引起数据库操作
出错的字符转义.

在Apache的httpd.conf中VirtualHost的相应设置方法:

php_admin_flag magic_quotes_gpc on
或者:
php_admin_value magic_quotes_gpc 1

================================================================================

================================================================================
7) allow_url_fopen和allow_url_include: 禁止读取远程文件
——————————————————————————–

顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论