继上篇《PHP网站被挂马防御战》
Php本身也有一些安全机制,如下:
1、禁用shell函数和com组件;(上篇已提到)
2、限制php作用域;(上篇已提到)
3、启动php安全模式;
4、其他安全设置;
5、降低php的系统权限;
一、php安全模式
php安全模式是个php内嵌的安全机制,能够控制php中的shell函数,比如system(),同时把大部分文件操作函数进行了权限控制。
Php安全模式默认是关闭的,可以修改php配置启动这个功能:
safe_mode = on
//只打开 safe_mode作用不大,还需要同时指定safe_mode_exec_dir和safe_mode_include_dir目录。
safe_mode_exec_dir = D:/htdocs/www/lib
//设定php安全模式下的可执行程序目录,建议不要直接指向网站根目录
safe_mode_include_dir = D:/htdocs/www/include
//设定php安全模式下的包含文件目录,建议不要直接指向网站根目录
safe_mode_protected_env_vars = LD_LIBRARY_PATH
//设置安全模式下限制用户不能更改的环境变量
针对以上几点,就要求php程序在设计的时候有一定的规划。哪个目录是执行程序的目录,哪个目录是上传文件的存放目录,等等要规划好。
正常情况下,文件上传存放的目录不能有执行的权限;可执行目录就不要放用户上传的文件,而且要定期检查可行性文件目录是否有改动。
二、会话安全设置
session.use_only_cookies = On
//是否仅仅使用cookie在客户端保存会话ID,打开这个选项可以避免使用URL传递会话带来的安全问题。禁用Cookie的客户端将使会话无法工作,但是所有浏览器默认都不会禁用Cookie。
session.use_trans_sid = Off
//是否使用明码在URL中显示SID(会话ID)。默认是禁止的,因为它会给你的用户带来安全危险:基于URL的会话管理总是比基于Cookie的会话管理有更多的风险,所以应当禁用。
session.hash_function = 1
//生成SID的散列算法。设为0采用MD5(128 bits),设为1采用SHA-1(160 bits)。SHA-1的安全性比MD5高一些
display_errors = Off
//是否将错误信息作为输出的一部分显示。强烈建议你关掉这个特性,并使用错误日志代替(参看下面)。在最终发布的web站点打开这个特性可能暴露一些安全信息,
define_syslog_variables = Off
//是否定义各种系统日志变量,建议关闭
error_log =
//将错误日志记录到哪个文件中。该文件必须对Web服务器用户可写。建议留空,错误则被记录到Web服务器的错误日志中。
log_errors = On
//是否在日志文件里记录错误
ignore_repeated_errors = On
//记录错误日志时是否忽略重复的错误信息。错误信息必须出现在同一文件的同一行才被被视为重复。建议开启,可以减少日志记录
四、其他安全设置
register_globals = Off
//关闭注册全局变量;全局变量这个功能本身在程序是很容易实现的,没必要php帮我们转换。而且php自动将post,get等数据都注册成全局变量,这是非常危险的。
magic_quotes_gpc = On
//开启引号转义功能;开启这个功能可以在一定程度防止SQL注入。Php会自动将post,get过来的数据做转义。
expose_php = Off
//关闭php版本信息;关闭该功能可以防止别人获取服务器的php版本信息,然后利用该版本的漏洞进行攻击。
allow_url_include = Off
//禁止include/require远程文件,降低木马攻击风险
enable_dl = On
//禁止用dl()方式加载php扩展
五、降低php的系统权限(针对windows / apache / php)
在windows平台下搭建的apache默认是system权限,所以考虑安全性,就有需要给apache降低权限。
net user user_apache pass_123 /add
net localgroup users user_apache /del
以上建立了一个不属于任何组的用户 user_apache ,密码是 pass_123 。
我们打开系统服务,点apache服务的属性,我们选择登录,选择此账户,我们填入上面所建立的账户和密码,重启apache服务。
这样,apache运行在低权限下了。
总结,通过修改php配置可以提高php网站安全性,但也没有绝对的安全,这就需要我们平时去维护,定期检查程序,做好备份,查看apache访问和错误日志,检查系统安全等等