1、 变量要尽量初始化,不要直接放入判断语句中初始化 ,如下:
if(isset($_SESSION[“username”])){
} else {
echo"您尚未登录!";
}
当register_globals=On时,我们提交http://www.sectop.com/ex2.php?_SESSION[username]=dodo,就可以绕过判断
2、文件漏洞
如下所示,如果黑客将$ dir修改为他自己的一个远程地址,就会执行他自己的问题件aaa.php
include($dir."/aaa.php".)
3、Session漏洞的防范
定期更换Session ID、更换Session名称(PHPSESSID这个变量一般是在cookie中保存的,如果更改了它的名称,就可以阻档黑客的部分攻击;)
4、对SQL注入漏洞的防范
加强对请求命令尤其是查询请求命令的过滤,不要直接将传入的参数拼接到SQL语句里;
尽可能避免网站出现bug,黑客往往通过报错信息分析出攻击漏洞
5、对脚本执行漏洞的防范
6、对文件漏洞的防范
一是把PHP代码中的错误提示关闭,这样可以避免黑客通过错误提示获取数据库信息和网页文件物理路径;
二是对open_basedir尽心设置,也就是对目录外的文件操作进行禁止处理;这样可以对本地文件或者远程文件起到保护作用,防止它们被攻击,这里还要注意防范Session文件和上载文件的攻击。
是把safe-made设置为开启状态,从而对将要执行的命令进行规范,通过禁止文件上传,可以有效的提高PHP网站的安全系数。
7、关闭危险函数
如果打开了安全模式,那么函数禁止是可以不需要的
system()、phpinfo() 等
可以在php.ini中设置
disable_functions = system,passthru,exec,shell_exec,popen,phpinfo
还有一些可以操作文件的函数
disable_functions = chdir,chroot,dir,getcwd,opendir,readdir,scandir,fopen,unlink,delete,copy,mkdir, rmdir,rename,file,file_get_contents,fputs,fwrite,chgrp,chmod,chown
这样就能够抵制大部分的phpshell了。
8、设置关闭PHP版本信息在http头中的泄漏
设置 expose_php = Off
这样黑客在 telnet www.xxx.com 80 的时候,那么将无法看到PHP的信息。
错误日志
建议在关闭display_errors后能够把错误信息记录下来,便于查找服务器运行的原因:
log_errors = On
同时也要设置错误日志存放的目录,建议根apache的日志存在一起:
error_log = D:/usr/local/apache2/logs/php_error.log
注意:给文件必须允许apache用户的和组具有写的权限。