继上篇《PHP网站被挂马防御战》 Php本身也有一些安全机制,如下: 1、禁用shell函数和com组件;(上篇已提到) 2、限制php作用域;(上篇已提到) 3、启动php安全模式; 4、其他安全设置; 5、降低php的系统权限; 一、php安全模式 php安全模式是个php内嵌的
继上篇《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
我们打开系统服务,点apache服务的属性,我们选择登录,选择此账户,我们填入上面所建立的账户和密码,重启apache服务。
这样,apache运行在低权限下了。
总结,通过修改php配置可以提高php网站安全性,但也没有绝对的安全,这就需要我们平时去维护,定期检查程序,做好备份,查看apache访问和错误日志,检查系统安全等等