2013年5月27日星期一

读《PHP漏洞全解1-9》总结

在《PHP漏洞全解》一文中,我提供了一个pdf文档,里面讲到了些PHP网页的安全性问题,以及如何防止这些非法攻击。这里,我根据这篇文档,简要总结一下防攻击的要点、核心思想(攻击实例请直接参考《PHP漏洞全解》原文)。
1.命令注入(Command Injection):正常情况下,PHP的命令执行函数system、exec、passthru、shell_exec与“``”运算符会执行外部的 应用程序或命令,然后显示输出结果。但是黑客可以在这些函数的参数内输入可执行外部应用程序或系统命令来执行攻击,这就是命令注入(Command Injection)攻击。
2.eval注入攻击(Eval Injection):eval函数会将输入的字符串参数作为PHP程序代码来执行,用户可以将PHP 程序代码保存在数据库的字段中,然后读入到eval函数中来执行。eval注入多攻击发生在黑客能够控制eval函数的所有或部分输入字符串时,黑客在 eval函数输入字符串内加上system等函数来执行攻击。在防范eval注入攻击时,我们建议使用escapeshellarg函数来处理命令参数, 该函数会将任何引起参数或命令结束的字符转义,单引号“’”,替换成“\’”,双引号“"”,替换成“\"”,分号“;”替换成“\;”。当然,仅用该函 数处理还是不够的,更多eval注入攻击的例子,可参考http://www.crazyage.org/php_eval_attack.html一文。
3.客户端脚本植入(Script Insertion):是指将可以执行的脚本插入到表单、图片、动画或超链接文字等对象内。当用户打开这些对象后,黑客所植入的脚本就会被执行,进而开始 攻击。防范该攻击的方法是如何将用户输入的脚本视作一本文本处理。在《PHP漏洞全解》中,就提到使用htmlspecialchars函数,该函数可有 效地将特殊字符串转化成HTML编码,这样,就可以有效地避免脚本植入。
4.跨网站脚本攻击(Cross Site Scripting, XSS):主要被攻击者利用来读取网站用户的cookies或者其他个人数据,一旦攻击者得到这些数据,那么他就可以伪装成此用户来登录网站,获得此用户 的权限。防范的方法一般还是使用htmlspecialchars函数过滤字符串,将输入的字符串转化成HTML编码,使之不能被浏览器识别。
5.SQL注入攻击(SQL Injection):指攻击者在表单中提交精心构造的sql语句,改动原来的sql语句,如果web程序没有对提交的数据经过检查,那么就会造成sql 注入攻击。防范SQL注入的方法一般有:使用intval函数(这里,使用floatval、doubleval)将从输入域得到的值转化为整数,防止用 户在输入域中填写非数字值构造非法SQL语句,当然,这种防御仅在确定要获得的是整数的情况下;另一种就是使用addslashes函数过滤输入值,该函 数可以将单引号“’”转换成“\’”,双引号“"”转换成“\"”,反斜杠“\”转换成“\\”,NULL字符加上反斜杠“\”,可以有效避免非法构造 SQL语句的可能。
6.跨网站请求伪造攻击(Cross Site Request Forgeries, CSRF):攻击者伪造目标用户的HTTP请求,然后此请求发送到有CSRF漏洞的网站,网站执行此请求后,引发跨站请求伪造攻击。攻击者利用隐蔽的 HTTP连接,让目标用户在不注意的情况下单击这个链接,从而达到攻击者的目的。CSRF的防范主要通过(1)检查网页的来源,主要通过将来源与当前站点 地址进行匹配对比,从而作出处理;(2)检查内置的隐藏变量,主要通过在表单中内置一个隐藏变量和一个session变量,然后检查这个隐藏变量和 session变量是否相等,以此来判断是否同一个网页所调用;(3)使用POST,不要使用GET,这意味着传递表单字段时,一定要是用POST,不要 使用GET,处理变量也不要直接使用$_REQUEST,因为$_REQUEST获取的数据既有可能是POST到的,也有可能是GET到的。
7.session会话劫持(Session Hijacking):指攻击者利用各种手段来获取目标用户的session id。
8.session固定攻击(Session Fixation):防范的方法主要有:(1)定期更改session id;(2)更改session的名称;(3)关闭透明化session id;(4)只从cookie检查session id;(5)使用URL传递隐藏参数。
9.HTTP响应拆分攻击(HTTP Response Splitting):HTTP响应拆分是由于攻击者经过精心设计利用电子邮件或者链接,让目标用户利用一个请求产生两个响应,前一个响应是服务器的响 应,而后一个则是攻击者设计的响应。此攻击之所以会发生,是因为WEB程序将使用者的数据置于HTTP响应表头中,这些使用者的数据是有攻击者精心设计 的。防范的方法主要有:(1)替换CRLF换行字符;(2)使用最新版本的PHP
10.文件上传漏洞(File Upload Attack):漏洞产生的原因是访问者上传附件的实际可能不是目标类型附件,而是可以指定的PHP程序。如果存放附件的目录是一个开放的文件夹,则入侵 者就可以远程执行上传的PHP文件来进行攻击。防范该漏洞的方法主要是在上传时检查文件的后缀,并且从硬件与软件上加强站点的管理,比如设置防火墙等。

没有评论:

发表评论