提升PHP安全:8个必须修改的PHP默认配置


Posted in Javascript onNovember 17, 2014

很明显,PHP+Mysql+Apache是很流行的web技术,这个组合功能强大,可扩展性强,还是免费的。然而,PHP的默认设置对已经上线的网站不是那么适合。下面通过修改默认的配置文件加强PHP的安全策略!

0x01:禁用远程url文件处理功能

像fopen的文件处理函数,接受文件的rul参数(例如:fopen('http://www.yoursite.com','r')).),这个功能可以很轻松的访问远程资源,然而,这是一个很重要的安全威胁,禁用这个功能来限制file function是个不错的选择,在php.ini文件中做如下修改:

allow_url_fopen = Off

0x02:禁用注册全局变量

php在4.2.0以前的版本中,用全局变量作为输入,这个功能叫做register_globals,在web应用中它引起了很多安全问题,因为它允许攻击者在一些情况下很容易的操作全局变量,幸运的是在4.2.0这个功能默认被禁用,它非常的危险,无论在什么情况下都要禁用这个功能。如果某些脚本需要这个功能,那么这个脚本就存在潜在的安全威胁。修改pnp.ini来禁用这个功能:

register_globals = Off

0x03:限制php的读写操作

在很多web开发的过程中,php脚本需要向本地文件系统进行读写操作,比如/var/www/htdocs/files,为了加强安全,你可以修改本地文件的读写权限:

open_basedir = /var/www/htdocs/files

0x04:Posing Limit

限制PHP的执行时间、内存使用量、post和upload的数据是最好的策略,可以做如下的配置:

max_execution_time = 30  ; Max script execution time

max_input_time = 60      ; Max time spent parsing input

memory_limit = 16M       ; Max memory used by one script

upload_max_filesize = 2M ; Max upload file size

post_max_size = 8M       ; Max post size

0x05:禁用错误消息和启用日志功能

在默认设置中,php会向浏览器输出错误消息,在应用程序的开发过程中,这个默认设置是最合理的配置,然而,它也可以向用户泄漏一些安全信息,例如安装路径和用户名。在已经开发完成的网站中,最好禁用错误消息然后把错误消息输出到日志文件中。

display_errors = Off

log_errors = On

0x06:隐藏PHP文件

 如果没有隐藏PHP文件,我们可以通过多种方法获取服务器PHP的版本,例如使用:http://www.example.com/script.php?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000

显然,我们不希望用户可以直接获取你网站服务器的PHP版本,幸运的是,在php.ini中有个开关可以禁用这个功能:

expose_php = Off

0x07:安全模式配置

在默认的情况下,php可以配置为安全模式,在这种模式下,Apache禁止访问文件、环境变量和二进制程序,在安全模式下,存在的最大问题就是只有文件的所有者才能访问这写PHP文件,如果有很多开发者共同开发这个程序,这样的设置就不切实际,当你需要访问一个PHP文件时就需要修改这个文件的所有者,另外一个问题就是其它程序也不能访问这些PHP文件,下面的配置就可以修改文件的的权限为用户组而不是单个用户。

safe_mode = Off

safe_mode_gid = On

通过启用safe_mode_gid,能够使用Apache的这个群组就能够访问PHP文件。安全模式对阻止二进制文件的执行也非常有效,然而,开发者却希望在某些特定情形下能够运行一些二进制文件。在这些特殊的情形下,可以将二进制文件放进一个目录中,比如(/var/www/binaries),可以做如下设置:

safe_mode_exec_dir = /var/www/binaries

最后,通过下面的设置,可以访问服务器的环境变量,提供一个以”_“分割的前缀,这样只能访问具有规定前缀的环境变量:

safe_mode_allowed_env_vars = PHP_

0x08:限制公共用户对具有特定后缀名的文件的访问

由于安全的原因,很多具有特定后缀名的文件不能被公共用户所访问,比如.inc后缀的文件,里面包含了一些敏感的信息,比如mysql连接信息,如果没有适当的配置,那么每个用户都能访问这个配置文件,为了加强网站的安全,你需要在. .htaccess文件进行如下的配置:

<filesmatch>

  Order allow,deny

  Deny from all

</filesmatch>

0x09:总结

PHP的默认配置是面向开发者的,如果网站面向广大的用户,建议重新配置PHP。

Javascript 相关文章推荐
javascript下操作css的float属性的特殊写法
Aug 22 Javascript
jquery实现的一个导航滚动效果具体代码
May 27 Javascript
轻量级javascript 框架Backbone使用指南
Jul 24 Javascript
酷! 不同风格页面布局幻灯片特效js实现
Feb 19 Javascript
解决同一页面中两个iframe互相调用jquery,js函数的方法
Dec 12 Javascript
canvas实现探照灯效果
Feb 07 Javascript
jQuery插件FusionCharts绘制的2D帕累托图效果示例【附demo源码】
Mar 28 jQuery
实例讲解DataTables固定表格宽度(设置横向滚动条)
Jul 11 Javascript
Node接收电子邮件的实例代码
Jul 21 Javascript
js实现弹幕飞机效果
Aug 27 Javascript
关于element-ui表单中限制输入纯数字的解决方式
Sep 08 Javascript
vue登录页实现使用cookie记住7天密码功能的方法
Feb 18 Vue.js
详解Javascript 装载和执行
Nov 17 #Javascript
jQuery带箭头提示框tooltips插件集锦
Nov 17 #Javascript
JavaScript实现的内存数据库LokiJS介绍和入门实例
Nov 17 #Javascript
浅谈jQuery异步对象(XMLHttpRequest)
Nov 17 #Javascript
node.js中watch机制详解
Nov 17 #Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(jquery)
Nov 16 #Javascript
js构造函数、索引数组和属性的实现方式和使用
Nov 16 #Javascript
You might like
2020最新CPU的性能排名
2020/04/02 数码科技
php生成文件
2007/01/15 PHP
探讨PHP调用时间格式的参数详解
2013/06/06 PHP
php共享内存段示例分享
2014/01/20 PHP
php使用curl实现简单模拟提交表单功能
2017/05/15 PHP
PHP设计模式之适配器模式原理与用法分析
2018/04/25 PHP
PHP的HTTP客户端Guzzle简单使用方法分析
2019/10/30 PHP
JQUERY的属性选择符和自定义选择符使用方法(二)
2011/04/07 Javascript
原生js实现查找/添加/删除/指定元素的class
2013/04/12 Javascript
一个JavaScript函数把URL参数解析成Json对象
2014/09/24 Javascript
javascript实现倒计时N秒后网页自动跳转代码
2014/12/11 Javascript
javascript省市区三级联动下拉框菜单实例演示
2015/11/29 Javascript
jQuery给指定的table动态添加删除行的操作方法
2016/10/12 Javascript
jQuery编写textarea输入字数限制代码
2017/03/23 jQuery
JS+jQuery实现注册信息的验证功能
2017/09/26 jQuery
js通过Date对象实现倒计时动画效果
2017/10/27 Javascript
vue轮播组件实现$children和$parent 附带好用的gif录制工具
2019/09/26 Javascript
基于纯JS实现多张图片的懒加载Lazy过程解析
2019/10/14 Javascript
vue把输入框的内容添加到页面的实例讲解
2019/11/11 Javascript
vue实现移动端input上传视频、音频
2020/08/18 Javascript
[52:02]DOTA2-DPC中国联赛 正赛 Phoenix vs Dragon BO3 第二场 2月26日
2021/03/11 DOTA
python和shell监控linux服务器的详细代码
2018/06/22 Python
Python实现朴素贝叶斯分类器的方法详解
2018/07/04 Python
python简易实现任意位数的水仙花实例
2018/11/13 Python
django 通过url实现简单的权限控制的例子
2019/08/16 Python
Python对象的属性访问过程详解
2020/03/05 Python
Python稀疏矩阵及参数保存代码实现
2020/04/18 Python
Python转换字典成为对象,可以用&quot;.&quot;方式访问对象属性实例
2020/05/11 Python
python不同系统中打开方法
2020/06/23 Python
Django DRF APIView源码运行流程详解
2020/08/17 Python
HTML5 自动聚焦(autofocus)属性使用介绍
2013/08/07 HTML / CSS
英国领先的名牌服装折扣零售商:Brown Bag Clothing
2019/01/08 全球购物
应届大学生自荐信
2013/12/05 职场文书
会计电算化专业毕业生求职信范文
2013/12/10 职场文书
入党积极分子对十八届四中全会期盼的思想汇报
2014/10/17 职场文书
服务器nginx权限被拒绝解决案例
2022/09/23 Servers