加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

系统管理员必须知道的PHP安全实践

发布时间:2020-12-13 22:16:33 所属栏目:PHP教程 来源:网络整理
导读:Apache?web?服务器提供了这种便利?:通过?HTTP?或?HTTPS?协议,访问文 件和内容。配置不当的服务器端脚本语言会带来各种各样的问题。所以, 使用?PHP?时要小心。以下是?25?个?PHP?安全方面的最佳实践,可供系统管理 员们安全地配置?PHP。 为?PHP?安全提示而
Apache?web?服务器提供了这种便利?:通过?HTTP?或?HTTPS?协议,访问文 件和内容。配置不当的服务器端脚本语言会带来各种各样的问题。所以, 使用?PHP?时要小心。以下是?25?个?PHP?安全方面的最佳实践,可供系统管理 员们安全地配置?PHP。 为?PHP?安全提示而提供的示例环境 ◆文件根目录(DocumentRoot):/var/www/html ◆?默?认?的?Web?服?务?器?:Apache(可?以?使?用?Lighttpd?或?Nginx?来?取?代 Apache) ◆默认的?PHP?配置文件?:/etc/php.ini ◆默认的?PHP?加载模块配置目录?:/etc/php.d/ ◆我们的示例?php?安全配置文件?:/etc/php.d/security.ini(需要使用文 本编辑器来创建该文件) ◆?操?作?系?统?:RHEL/CentOS/Fedora?Linux(相?关?指?令?应?该?与?Debian/ Ubuntu?等其他任何?Linux?发行版或者?OpenBSD/FreeBSD/HP-UX?等其他类 似?Unix?的操作系统兼容)。 ◆默认的?php?服务器?TCP/UDP?端口?:无 将所有PHP错误记入日志 别让?PHP?错误信息暴露在网站的所有访客面前。编辑?/etc/php.d/ security.ini,执行以下指令?: display_errors=Off 确保你将所有?PHP?错误记入到日志文件中?: log_errors=On error_log=/var/log/httpd/php_scripts_error.log 不允许上传文件 出于安全原因,编辑?/etc/php.d/security.ini,执行以下命令?: file_uploads=Off 如果使用你应用程序的用户需要上传文件,只要设置?upload_max_ filesize,即可启用该功能,该设置限制了?PHP?允许通过上传的文件的最大 值?: file_uploads=On #?用户通过?PHP?上传的文件最大?1MB upload_max_filesize=1M 关闭远程代码执行 如?果?启?用,allow_url_fopen?允?许?PHP?的?文?件?函?数?——?如?file_get_ contents()、include?语句和?require?语句——可以从远程地方(如?FTP?或网站) 获取数据。 allow_url_fopen?选项允许?PHP?的文件函数——如?file_get_contents()、 include?语句和?require?语句——可以使用?FTP?或?HTTP?协议,从远程地方 获取数据。编程员们常常忘了这一点,将用户提供的数据传送给这些函数 时,没有进行适当的输入过滤,因而给代码注入安全漏洞留下了隐患。基于 PHP?的?Web?应用程序中存在的众多代码注入安全漏洞是由启用?allow_url_ fopen?和糟糕的输入过滤共同引起的。编辑?/etc/php.d/security.ini,执行 以下指令?: allow_url_fopen=Off 出于安全原因,我还建议禁用?allow_url_include?: allow_url_include=Off 启用SQL安全模式 编辑?/etc/php.d/security.ini,执行以下指令?: sql.safe_mode=On 如果启用,mysql_connect()?和?mysql_pconnect()?就忽视传送给它们的 任何变量。请注意?:你可能得对自己的代码作一些更改。sql.safe_mode?启 用后,第三方开源应用程序(如?WorkdPress)及其他应用程序可能根本运行 不了。我还建议你针对所有安装的?php?5.3.x?关闭?magic_quotes_gpc,因 为它的过滤并不有效、不是很可靠。mysql_escape_string()?和自定义过滤 函数能起到更好的作用?: magic_quotes_gpc=Off 控制POST请求的大小 作为请求的一部分,客户机(浏览器或用户)需要将数据发送到?Apache Web?服务器时,比如上传文件或提交填好的表单时,就要用到?HTTP?POST 请求方法。攻击者可能会企图发送过大的?POST?请求,大量消耗你的系统 资源。你可以限制?PHP?将处理的?POST?请求的最大大小。编辑?/etc/php. d/security.ini,执行以下命令?: ;?在此设置实际可行的值 post_max_size=1K 1K?设置了?php?应用程序允许的?POST?请求数据的最大大小。该设置还 影响文件上传。要上传大容量文件,这个值必须大于?upload_max_filesize。 我还建议你限制使用?Apache?Web?服务器的可用方法。编辑?httpd.conf,执 行针对文件根目录?/var/www/html?的以下指令?: <Directory?/var/www/html> <LimitExcept?GET?POST> Order?allow,deny </LimitExcept> ##?可在此添加配置的其余部分?...?## </Directory> 资源控制(拒绝服务控制) 你可以设置每个?php?脚本的最长执行时间,以秒为单位。另一个建议的 选项是设置每个脚本可能用于解析请求数据的最长时间,以及脚本可能耗 用的最大内存数量。编辑?/etc/php.d/security.ini,执行以下命令?: #?设置,以秒为单位 max_execution_time?=?30 max_input_time?=?30 memory_limit?=?40M 为PHP安装Suhosin高级保护系统 Suhosin?是一款高级的保护系统,面向安装的?PHP。它旨在保护服务器和 用户,远离?PHP?应用程序和?PHP?核心中的已知缺陷和未知缺陷。Suhosin?分 两个独立部分,可以单独使用,也可以组合使用。第一个部分是针对?PHP?核 心的小补丁,实施了几个低级防护措施,以防范缓冲器溢出或格式字符串安 全漏洞?;第二个部分是功能强大的?PHP?加载模块,实施了其他所有的保护措 施。 保持PHP、软件和操作系统版本最新 打安全补丁是维护Linux、Apache、PHP和MySQL服务器的一个重要环节。 应该使用以下其中任何一个工具(如果你通过软件包管理器来安装?PHP), 尽快检查所有的?PHP?安全更新版本,并尽快打上?: #?yum?update?或 #?apt-get?update?&&?apt-get?upgrade 你可以配置红帽?/CentOS/Fedora?Linux,以便通过电子邮件发送?yum?软 件包更新通知。另一个选项是通过?cron?job(计划任务)打上所有的安全 更新版。在?Debian/Ubuntu?Linux?下,可以使用?apticron?来发送安全通知。 注?:经常访问?php.net,寻找源代码安装的最新版本。 限制文件和目录访问 确保你以?Apache?或?www?等非根用户的身份来运行?Apache。所有文件 和目录都应该归非根用户(或?apache?用户)所有,放在?/var/www/html?下?: #?chown?-R?apache:apache?/var/www/html/ /var/www/html/?是个子目录,这是其他用户可以修改的文件根目录, 因为根目录从来不在那里执行任何文件,也不会在那里创建文件。 确保在?/var/www/html/?下,文件权限设成了?0444(只读): #?chmod?-R?0444?/var/www/html/ 确保在?/var/www/html/?下,所有目录权限设成了?0445?: #?find?/var/www/html/?-type?d?-print0?|?xargs?-0?-I?{}?chmod?0445?{} 关于设置合适文件权限的补充 chown?和?chmod?命令确保?:不管在什么情况下,文件根目录或文件根目 录里面的文件都可以被?Web?服务器用户?apache?写入。请注意?:你需要设 置对你网站的开发模型最合理的权限,所以可以根据自身需要,随意调整 chown?和?chmod?命令。在这个示例中,Apache?服务器以?apache?用户的身 份来运行。这可以在你的?httpd.conf?文件中用?User?和?Group?命令来配置。 apache?用户需要对文件根目录下的所有内容享有读取访问权,但是不应该 享有写入访问权。 确保?httpd.conf?有以下命令,实现限制性配置?: <Directory?/?> Options?None AllowOverride?None Order?allow,deny </Directory> 由于篇幅所限,本文仅节选了?25?条最佳实践当中的?9?条。完整内容见 原文?: 25?PHP?Security?Best?Practices?For?Sys?Admins 译文?:http://os.51cto.com/art/201111/305014.htmv

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读