PHP安全加固

由于脚本语言和早期版本设计的诸多原因,php项目存在不少安全隐患。从配置选项来看,可以做如下
的优化。

屏蔽PHP错误输出

在/etc/php.ini(默认配置文件位置),将如下配置值改为Off

display_errors=Off

不要将错误堆栈信息直接输出到网页上,防止黑客加以利用相关信息。

正确的做法是:

把错误日志写到日志文件中,方便排查问题。

 

屏蔽PHP版本

默认情况下PHP版本会被显示在返回头里,如:

X-powered-by: PHP/7.2.0
将php.ini中如下的配置值改为Off

expose_php=Off

 

关闭全局变量

如果开启全局变量会使一些表单提交的数据被自动注册为全局变量。代码如下:

<form action="/login" method="post">
<input name="username" type="text">
<input name="password" type="password">
<input type="submit" value="submit" name="submit">
</form>

如果开启了全局变量,则服务器端PHP脚本可以用$username和$password来获取到用户名和密
码,这会造成极大的脚本注入危险。
开启方法是在php.ini中修改如下:

register_globals=On

建议关闭,参数如下:

register_globals=Off

当关闭后,就只能从$POST、$GET、$_REQUEST里面获取相关参数。

 

文件系统限制

可以通过open_basedir来限制PHP可以访问的系统目录。
如果不限制使用下面的脚本代码(hack.php)可以获取到系统密码。

<?php
echo file_get_contents('/etc/passwd');
?>

当设置了后则会报错,不再显示相关信息,让系统目录b不会被非法访问:

PHP Warning: file_get_contents(): open_basedir restriction in effect.
File(/etc/passwd) is not within the allowed path(s): (/var/www) in
/var/www/hack.php on line 3
Warning: file_get_contents(): open_basedir restriction in effect.
File(/etc/passwd) is not within the allowed path(s): (/var/www) in
/var/www/hack.php on line 3
PHP Warning: file_get_contents(/etc/passwd): failed to open stream:
Operation not permitted in /var/www/hack.php on line 3
Warning: file_get_contents(/etc/passwd): failed to open stream: Operation
not permitted in /var/www/hack.php on line 3

设置方法如下:

open_basedir=/var/www;c:/phpstudy/www

 

禁止远程资源访问

allow_url_fopen=Off
allow_url_include=Off

 

开启安全模式(php<5.3)

safe_mode=On
safe_mode_include_dir = D:/phpstudy/www/include/

 

开启magic_quotes_gpc(php<5.4),主要是对$GET,$POST,$_COOKIE数组里的函数自动转义

magic_quotes_gpc=On

 

禁用危险函数

disable_functions =
phpinfo,eval,passthru,assert,exec,system,ini_set,ini_get,get_included_files,
get_defined_functions,get_defined_constants,get_defined_vars,glob,chroot,``,
scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_resto
re,dl,pfsockopen,openlog,syslog,readlink,symlink,popepassthru,stream_socket_
server,fsocket,fsockopen

 

其他第三方安全扩展

Suhosin

设计初衷是为了保护服务器和用户抵御PHP程序和PHP核心中,已知或者未知的缺陷。

PHP7支持版本

Taint

用于xss/sqli/shell注入的检测。

安装使用教程

版权声明:
作者:筱鑫
链接:https://blog.cmkjiot.com/archives/20
来源:IBLOG
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭