PHP应用程序以高于平均水平的安全问题而闻名。您使用什么配置技术来确保应用程序尽可能安全?
我在寻找类似的想法:
- 使用强化的PHP / Suhosin
- 使用mod_security
- 在php.ini中禁用register_globals和allow_url_fopen
我通常使用Linux,但也可以建议Windows解决方案。
PHP应用程序以高于平均水平的安全问题而闻名。您使用什么配置技术来确保应用程序尽可能安全?
我在寻找类似的想法:
我通常使用Linux,但也可以建议Windows解决方案。
Answers:
使用open_basedir指令将您的PHP脚本限制在其主目录以及最终的其他应用程序目录中。本身这是非常有效的。
使用强化的php,因为它不花钱,而且可以提供帮助。
使用suPHP可以使PHP脚本作为文件的所有者(每个网站一个用户)执行,并避免使用权限不佳的文件(例如777)... suPHP还可以允许您在每个网站的php.ini上使用文件,从而使一个站点变得愚蠢要求不要破坏一切。
Mod_security是一大优势,但需要很好地使用和配置。
以我的经验,基于PHP的网站上的大多数漏洞是(网站)设计不佳的结果,而不是PHP本身的缺陷。
一些快速提示:
*您也可以看一下我写的一篇名为“保护phpinfo(),有点类似”的简短文章,并确保阅读评论http://egovsergo.com/2009/04/03/protecting-your-phpinfo/如果我以某种方式忘记了在生产站点上删除phpinfo(),那是一个快速的主意,我必须(某种程度上)保护phpinfo()。
以更一般的方式,一些开发人员为敏感功能编写包装程序,以检查是否未设置“生产站点”标志,并在生产中禁用敏感功能。
应该修改以增强PHP的其他参数:
safe_mode = Off
register_globals = Off
expose_php = Off
allow_url_fopen = Off
allow_url_include = Off
log_errors = On
error_log = /var/log/phperror.log
display_errors = Off
enable_dl = Off
disable_functions="popen,exec,system,passthru,proc_open,shell_exec,show_source,phpinfo"
将所有PHP错误存储在文件/var/log/phperror.log中:
touch /var/log/phperror.log
chmod 666 /var/log/phperror.log
考虑open_basedir
基于“每个站点”进行设置。 open_basedir
是php.ini设置,它将防止您的脚本访问已定义的白名单之外的文件。如果您的服务器托管多个站点,则将阻止一个站点从另一站点读取数据库设置。它还将阻止php脚本访问/修改核心系统文件。打开basedir很容易设置,只需在php_admin_value open_basedir /my/list/of/folders:/as/a/colon/seperated/list
每个Apache虚拟主机上添加“ ” 行。
还可以考虑为所有不包含PHP脚本的网站/文件夹关闭PHP脚本引擎(例如,上载的图像文件夹)。同样,这很简单,将“ php_admin_value engine off”添加到不需要php的任何Apache VirtualHosts中。要在目录中禁用PHP,请将相同的内容放入Directory标记中。
尽可能严格地运行文件权限,避免对Apache用户具有对PHP脚本的写访问权,这样可以防止正在运行的脚本修改自身或同一站点/服务器上的其他脚本。尽可能避免使用777权限,请找出运行该应用程序并使用这些权限所需的最低权限。
如果您要托管多个站点,每个站点都有自己的数据库,请为每个站点使用单独的MySQL / Postgres用户,并为每个用户设置权限,以使他们只能访问相关数据库。同样,这将防止恶意脚本篡改另一个应用程序的数据库。
Suosin,HardenedPHP,mod_security等同样也很有价值,但是除了紧密锁定的配置之外,还请使用它们,而不是代替。
Suhosin的性能成本相当可观,因此“不花钱”的评论有点过时。
您是否在寻找一些基本的防火墙/拓扑建议?我喜欢使用磅之类的东西来防止未经清洗的互联网直接访问PHP Web服务器的想法。这样,您还可以将网络服务器与网络的其他部分隔离。
使用Suhosin / mod_security / SuPHP当然可以使您的PHP服务器安全。禁用某些功能,例如exec,passthru,system和escapeshellcmd也会有很大帮助。