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

很明显,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。

时间: 2024-10-30 16:59:39

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

022 修改springmvc的默认配置

一 .概述 在springboot之中,springmvc的默认配置都是配置好的,但是在我们使用的过程之中需要对默认的配置进行修改. 本节,我们完成对springmvc的默认配置的修改, [1]了解springmvc的自动配置原理 [2]修改springmvc的默认配置. 二 .springmvc的自动配置原理 springboot在默认情况进行对springmvc进行了配置,我们首先看一下自动配置类. WebMvcAutoConfiguration在这个类之中帮助我们配置好了springmvc

修改JQM的默认配置属性

从本文开始,使用 jQuery Mobile 与 HTML5 开发 Web App 系列将会进入第三部分——jQuery Mobile 事件与方法,这其中将会利用之前所讲述的 jQuery Mobile 组件作为例子说明,因此 Kayo 建议如果你不熟悉 jQuery Mobile ,可以首先阅读前面两部分的文章.本文会介绍 jQuery Mobile 的默认配置以及一些基本的事件使用方法. 一.默认配置 jQuery Mobile 会有一些默认的设置,如之前介绍过的 Ajax 导航形式,可以选

idea修改maven默认配置不生效

1.问题现象 我的idea版本是2019.2的,通过File->Other Setting->Setting for New Projects修改maven的默认配置后,新建项目maven默认配置不生效 2.解决 打开C:\Users\用户\.IntelliJIdea2019.2\config\options下的project.default.xml,添加一个component,保存,打开idea,File->Other Setting->Setting for New Proje

修改Android Studio默认的API Level(SDK版本)

原文:修改Android Studio默认的API Level(SDK版本) Android Studio(2.1.2)新建工程的时候只会让你选择最低支持的SDK版本,默认的目标编译SDK版本会以系统当前SDK中最新SDK platform作为目标的API Level.但是很多时候我们并不需要最新的SDK版本,如何修改呢? 方法是:修改工程目录中的Gradle Scripts->build.gradle(Module:app)中的相关行,具体见下图: 当然也可以图形化操作,右键工程目录选择"

gitlab修改redis、postgresql配置

由于工作需要将redis认证方式改为了允许远程连接,并作了requirepass设置,postgresql认证方式也改为了允许远程连接并且需要通过密码. 引起的问题 提交的动态无法写入,表现在gitlab上就是提交的动态无法在首页显示,postgresql中也没有提交记录 解决办法 修改gitlab数据库配置 /home/git/gitlab/config/database.yml production: adapter: postgresql encoding: unicode databas

CentOS修改系统的默认启动模式为命令号界面

CentOS在安装桌面之后,将图形界面设置为默认模式,给PC内存带来较大压力,所以希望修改系统的默认启动模式为命令号界面,而不启动图形界面.方法如下: 1.以 root用户登录系统:或者 用su切换到超级用户模式: 2.修改/etc/inittab 文件: vi /etc/inittab 将最后一句: id:5:initdefault: 修改为: id:3:initdefault: 保存退出,重启系统即可. 3.原因及解释: Linux有7种运行级别:如下所示 # Default runleve

如何动态修改下拉列表的默认选中项

两种方法,第一种嵌入java代码:原理是首先获取需要选中项,然后用java代码控制那个标签内需要添加selected,其中Wish是放在request中的一个对象,仅此而已 <select name="wish.visible"> <%int visible=((Wish)request.getAttribute("wish")).getVisible(); %> <option value="1" <%if(

修改outlook的默认字体

打开Outlook,找到"工具"---"选项": 2.在上面的图中,点击"邮件格式"选项: 3.单击"信纸和字体"选项打开如下图: 4.分别点击上图中用红色圈起来的选项即可更改. 修改outlook的默认字体,布布扣,bubuko.com

修改Cygwin的默认启动路径

原先启动Cygwin后,pwd显示: C:\Documents and Settings\[email protected] ~$ pwdC:\Documents and Settings\Administrator 输入env查看目前系统有哪些环境变量: 可以找到HOME=C:\Documents and Settings\Administrator 因此,想改变Cygwin默认启动路径就是去改HOME的环境变量为你所想要的值就可以了. 右键 桌面上我的电脑 -> 属性 -> 高级 ->