常见漏洞:
1、session文件漏洞
Session攻击是黑客最常用到的攻击手段之一。当一个用户访问某一个网站时,为了免客户每进人一个页面都要输人账号和密码,PHP设置了Session和Cookie用于方便用户的使用和访向。
2、SQL注入漏洞
用户利用在表单字段输入SQL语句的方式来影响正常的SQL执行。还有一种是通过system()或exec()命令注入的,它具有相同的SQL注入机制,但只针对shell命令。
3、脚本执行漏洞
脚本执行漏洞常见的原因是由于程序员在开发网站时对用户提交的URL参数过滤较少引起的,用户提交的URL可能包含恶意代码导致跨站脚本攻击。脚本执行漏洞在以前 的PHP网站中经常存在,但是随着PHP版本的升级,这些间题已经减少或者不存在了。
4、全局变量漏洞
PHP中的变量在使用的时候不像其他开发语言那样需要事先声明,PHP中的变量可以不经声明就直接使用,使用的时候系统自动创建,而且也不需要对变量类型进行说明,系统会自动根据上下文环境自动确定变量类型。这种方式可以大大减少程序员编程中出错的概率,使用起来非常的方便。
5、文件漏洞
文件漏洞通常是由于网站开发者在进行网站设计时对外部提供的数据缺乏充分的过滤导致黑客利用其中的漏洞在Web进程上执行相应的命令。假如在lsm.php中包含这样 一段代码:include($b."/aaa.php".),这对黑客来说,可以通过变量$b来实现远程攻击,可以是黑客自已的代码,用来实现对网站的攻击。可以向服务器提交a.php include=http://***/b.php,然后执行b.php的指令。
防范措施:
1、session防范:
a. 定期更换Session ID,更换Session ID可以用PHP自带函数来实现;
b. 通常情况下Session的默认名称是PHPSESSID,这个变量一般是在cookie中保存的,更换Session名称;
c. 对透明化的Session ID进行关闭处理,关闭透明化Session ID可以通过操作PHP.ini文件来实现;
d. 在http请求不使用cookies来制定Session id,Sessioin id使用链接来传递;
e. 通过URL传递隐藏参数,这样可以确保即使黑客获取了session数据,但是由于相关参数是隐藏的,它也很难获得Session ID变量值;
2、对SQL注入漏洞的防范:
a. 一是把过滤性语句进行参数化处理,也就是通过参数化语句实现用户信息的输入而不是直接把用户输入嵌入到语句中;
b. 在网站开发的时候尽可能少用解释性程序,黑客经常通过这种手段来执行非法命令;
c. 在网站开发时尽可能避免网站出现bug,否则黑客可能利用这些信息来攻击网站;
d. 另外还要经常使用专业的漏洞扫描工具对网站进行漏洞扫描;
3、对脚本执行漏洞的防范:
a. 对可执行文件的路径进行预先设定。可以通过safe_moade_exec_dir来实现;
b. 对命令参数进行处理,一般用escapeshellarg函数实现;
c. 用系统自带的函数库来代替外部命令;
d. 在操作的时候进可能减少使用外部命令;
4、对全局变量漏洞防范:
对于PHP全局变量的漏洞问题,以前的PHP版本存在这样的问题,但是随着PHP版本升级到5.5以后,可以通过对php.ini的设置来实现,设置ruquest_order为GPC。另外在php.ini配置文件中,可以通过对magic_quotes_runtime进行布尔值设置是否对外部引人的数据中的溢出字符加反斜线。为了确保网站程序在服务器的任何设置状态下都能运行。可以在整个程序开始的时候用get_magic_quotes_runtime检测设置状态决定是否要手工处理,或者在开始(或不需要自动转义的时候)用set_magic_quotes_runtime(0)关掉。
5、对文件漏洞的防范:
a. 把PHP代码中的错误提示关闭,这样可以避免黑客通过错误提示获取数据库信息和网页文件物理路径;
b. 对open_basedir尽心设置,也就是对目录外的文件操作进行禁止处理;这样可以对本地文件或者远程文件起到保护作用,防止它们被攻击,这里还要注意防范Session文件和上载文件的攻击;
c. 把safe-made设置为开启状态,从而对将要执行的命令进行规范,通过禁止文件上传,可以有效的提高PHP网站的安全系数;