提升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 相关文章推荐
My Desktop :) 桌面式代码
Dec 29 Javascript
把input初始值不写value的具体实现方法
Jul 04 Javascript
使用POST方式弹出窗口的两种方法示例介绍
Jan 29 Javascript
js动态往表格的td中添加图片并注册事件
Jun 12 Javascript
Node.js入门教程:在windows和Linux上安装配置Node.js图文教程
Aug 14 Javascript
JQuery菜单效果的两个实例讲解(3)
Sep 17 Javascript
原生js实现图片层叠轮播切换效果
Feb 02 Javascript
iscroll.js的上拉下拉刷新时无法回弹的解决方法
Feb 18 Javascript
JS函数修改html的元素内容,及修改属性内容的方法
Oct 28 Javascript
详解Vue单元测试Karma+Mocha学习笔记
Jan 31 Javascript
clipboard.js在移动端复制失败的解决方法
Jun 13 Javascript
vue-cli3全面配置详解
Nov 14 Javascript
详解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
PHP中读写文件实现代码
2011/10/20 PHP
php变量范围介绍
2012/10/15 PHP
phpmyadmin下载、安装、配置教程
2017/05/16 PHP
不错的新闻标题颜色效果
2006/12/10 Javascript
javascript 操作select下拉列表框的一点小经验
2010/03/20 Javascript
javascript中运用闭包和自执行函数解决大量的全局变量问题
2010/12/30 Javascript
jQuery获取文本节点之 text()/val()/html() 方法区别
2011/03/01 Javascript
JS 实现导航栏悬停效果
2013/09/23 Javascript
JavaScript输入邮箱自动提示实例代码
2014/01/13 Javascript
javascript实现des解密加密全过程
2014/04/03 Javascript
自制的文件上传JS控件可支持IE、chrome、firefox etc
2014/04/18 Javascript
绑定回车enter事件代码
2014/05/18 Javascript
javascript获取四位数字或者字母的随机数
2015/01/09 Javascript
基于jQuery倾斜打开侧边栏菜单特效代码
2015/09/15 Javascript
基于jquery实现ajax无刷新评论
2020/08/19 Javascript
Vue.js计算属性computed与watch(5)
2016/12/09 Javascript
react.js 获取真实的DOM节点实例(必看)
2017/04/17 Javascript
基于js原生和ajax的get和post方法以及jsonp的原生写法实例
2017/10/16 Javascript
AngularJS 控制器 controller的详解
2017/10/17 Javascript
nodejs操作mongodb的填删改查模块的制作及引入实例
2018/01/02 NodeJs
vue.js2.0 实现better-scroll的滚动效果实例详解
2018/08/13 Javascript
Vue js with语句原理及用法解析
2020/09/03 Javascript
Python 中的 else详解
2016/04/23 Python
python django 实现验证码的功能实例代码
2017/05/18 Python
python 函数中的内置函数及用法详解
2019/07/02 Python
Python 批量刷博客园访问量脚本过程解析
2019/08/30 Python
python并发爬虫实用工具tomorrow实用解析
2019/09/25 Python
如何使用Pytorch搭建模型
2020/10/26 Python
一款纯css3实现的颜色渐变按钮的代码教程
2014/11/12 HTML / CSS
canvas实现圆绘制的示例代码
2019/09/11 HTML / CSS
详解h5页面在不同ios设备上的问题总结
2019/03/01 HTML / CSS
2014学雷锋活动总结
2014/03/09 职场文书
服务之星事迹材料
2014/05/03 职场文书
2019 入党申请书范文
2019/07/10 职场文书
HTML+VUE分页实现炫酷物联网大屏功能
2021/05/27 Vue.js
td 内容自动换行 table表格td设置宽度后文字太多自动换行
2022/12/24 HTML / CSS