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