记录分享邓杰律师从事网络技术工作点点滴滴。
编者按:所有的PHP源码网站都必须配置环境,不论是使用集成环境还是自己手动搭建,可能很少有人关注过php.ini里面配置的这些东西到底有什么作用,很多站长在设置php.ini文件时,都是网上找一个教程,然后人家说哪里增加哪里删除按步骤进行,但是这里面的设置还真有两处会引起网站安全问题。有人会说就一个php.ini文件怎么可能会有安
以windows系统上安装PHP为例,将php.ini-development文件,复制一份并将其重命名为php.ini并打开进行逐项配置。(https://www.php.net/manual/zh/ini.php)
1、查找到hort_open_tag = Off将其改为short_open_tag = On 开启短标签功能。
告诉 PHP 是否允许 PHP 开放标签的缩写形式(<? ?>)。如果要 PHP 和 XML 结合使用,可以禁用此选项以便嵌入使用 <?xml ?>。否则还可以通过 PHP 来打印,例如:<?php echo '<?xml version="1.0"?>'; ?>。此外,如果禁用,必须使用 PHP 开放标签的完整形式(<?php ?>)。
2、查找到expose_php = On,将其改为expose_php = Off
确定是否向外界公开服务器上安装了 PHP,在 HTTP 标头中包含 PHP 版本号(例如:X-Powered-By: PHP/5.3.7)。
3、查找到display_errors = On将其修改为:display_errors = Off。查找到;error_log = php_errors.log将其修改为:error_log = e:/php7340_errors.log
4、查找到如下代码
; On windows:
; extension_dir = "ext"
将extension_dir前面的分号去掉,并且把ext修改为你的PHP安装路径,如:
extension_dir = "e:/php/ext"
5、查找到max_execution_time = 30,将数字30修改为300或1200。
当命中 max_execution_time 中设置的超时的时候,PHP 运行时将会优雅的销毁资源。如果在这时卡住,硬超时将计时设置的秒数。当命中硬超时的时候,PHP 将异常退出。当设置为 0 时,硬超时始终不会激活。
6、查找到;cgi.force_redirect = 1,把前面的分号去掉,并把数字1改为0。cgi.force_redirect = 0的意思就是关闭重定向执行php文件。默认是开启的,但出于安全考虑,为防止别人上传木马执行如:你的网站url/as=你的网站url/sdf/muma.php,这样的重定向PHP文件是可执行的,将这个配置改为0之后这类型的重定向PHP文件就禁止执行。这也是为什么有的网站总是被挂马的原因,这样修改之后即便是网站前台存在安全漏洞,被黑客上传的木马文件,通过这样的方式也无法运行木马文件。
——————
cgi.force_redirect 是在大多数 Web 服务器下提供将 PHP 作为 CGI 运行的安全性所必需的。如果未定义,PHP 默认开启。也可以关闭它自行承担风险。
注意:Windows 用户:使用 IIS 时必须关闭此选项。对于 OmniHTTPD 或 Xitami,同样适用。
——————
7、查找到;cgi.fix_pathinfo=1将分号去掉并将数字1改为0。作用是禁止解析非法php文件,如/a.jpg/1.php这样的图片下的一个php文件属于非法的,设置为0就是禁止执行。这种将木马伪装成图片上传的文件存在已久,禁止这类文件运行,即使被上传了木马,由于设置了不允许运行,所以没有用。
——————
为 CGI 提供真正的 PATH_INFO/PATH_TRANSLATED 支持。PHP 以前的行为是将 PATH_TRANSLATED 设置为 SCRIPT_FILENAME,而不去理解 PATH_INFO 是什么。有关 PATH_INFO 的更多信息,请参阅 CGI 规范。将此设置为 1 将导致 PHP CGI 修复其路径以符合规范。设置为 0 会导致 PHP 像以前一样运行。默认打开。应该修复脚本以使用 SCRIPT_FILENAME 而不是 PATH_TRANSLATED。
——————
8、查找到fastcgi.impersonate = 1将前面的分号去掉。作用是iis或nginx使用的是fastcgi方式解析php文件,不开启就不能运行php程序,Apache则不用开启。
——————
IIS 下的 FastCGI(在基于 WINNT 的操作系统上)支持模拟调用客户端的安全令牌的能力。这允许 IIS 定义请求在其下运行的安全上下文。Apache 下的 mod_fastcgi 目前不支持此功能(2002-03-17)。如果在 IIS 下运行,则设置为 1。默认为 0。
——————
9、查找到cgi.rfc2616_headers = 0 去掉分号并把0改为1。意思是告诉php使用什么样的报头,什么是报头呢?就像这个:HTTP/1.1。
10、查找到upload_tmp_dir =,将前面的分号删除并将其修改为upload_tmp_dir = C:/Windows/Temp/php
设置上传文件的临时虚拟目录,但是不会真的上传任何文件在里面。如不设置默认上传到系统临时文件目录。
查找到;session.save_path = "/tmp"并将其修改为:session.save_path = "C:/Windows/Temp/php"
11、查找并将下面参数设置为:
post_max_size = 80M
upload_max_filesize = 80M
——————
设置允许 post 数据的最大大小。此设置也会影响文件上传。要上传大文件,此值必须大于 upload_max_filesize。 一般来说,memory_limit 应该大于 post_max_size。 当使用 int 时, 其值以字节来衡量。还可以使用在 FAQ 中描述的速记符。 如果 post 数据的大小大于 post_max_size,则 $_POST 和 $_FILES 超全局变量为空。这可以通过多种方式进行跟踪,例如通过将 $_GET 变量传递给处理数据的脚本,即 <form action="edit.php?processed=1">,然后检查是否设置了 $_GET@['processed']。
注意:
PHP 允许使用字节值的快捷方式,包括 K(千)、M(兆)和 G(千兆)。如果使用其中任何一个,PHP 将自动进行转换。注意不要超过 32 位有符号整数限制(如果使用的是 32 位版本),因为这会导致脚本失败。
——————
12、查找到以下代码,一行一个,分别去掉其前面的分号(分号表示注释,不生效的意思,去掉就生效了):
extension=bz2
extension=curl
extension=gd2
extension=gmp
extension=mbstring
extension=php_mysql.dll
extension=mysqli
extension=pdo_mysql
extension=sqlite3
extension=openssl
13、查找到date.timezone =删除前面分号并修改为如下样子:
date.timezone = Asia/Shanghai
也可以设置为date.timezone = PRC ,设置时区为中国时区,PRC是中国时区的简称。
14、查找到:disable_functions =在其后添加:
disable_functions =passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,eval,assert,putenv,phpinfo
本指令可用于禁止某些函数。接受逗号分隔的函数名列表作为参数。此指令仅能禁用 内置函数。 不能影响用户自定义函数。本指令只能设置在 php.ini 中。例如不能将其设置在 httpd.conf 中。
15、查找到allow_url_fopen =On并将其关闭以禁止打开远程地址。allow_url_fopen = Off
16、查找到allow_url_include = On并将其关闭以禁止禁止引用URL文件。allow_url_include = Off
17、查找并开启 OPCACHE,提升网站访问速度体验。OPCACHE 是一个 PHP 的 byte code 缓存,它可以提高 PHP 的性能,让页面的加载速度更快。将下面的设置取消注释,保存
[opcache]
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=256
opcache.max_accelerated_files=20000
opcache.validate_timestamps=1
18、查找到memory_limit并将其值调整为258M。
设置了允许脚本分配的最大内存量,以字节为单位。这有助于防止写得不好的脚本吃掉服务器上所有可用的内存。请注意,如果不需要内存限制,请将此指令设置为 -1。
以上为邓杰律师在搭建维护web服务器环境过程中对php.ini文件进行的配置,如您有任何疑问可以添加邓杰律师微信进行技术交流。

专注执业领域事务
全力办理委托事项
扎实维护合法权益

邓杰律师电话:13715198118
请输入您的联系电话,座机请加区号
