从互联网诞生起,安全威胁就--直伴随着网站的成长,各种Web进犯和信息走漏也从未停止。2011年中国互联网范畴爆出两桩比较大的安全事故,一桩是新浪微博遭XSS进犯,另一桩是以CSDN为代表的多个网站走漏用户密码和个人信息。特别是后者,因为影响人群广泛,部分受影响网站涉及用户实体财物和交易安全,一时成为言论焦点。
一、XSS攻击
xss攻击即跨站点脚本攻击( Cross Site Script), 指黑客通过篡改网页,注入恶意HTML脚本,保存在网站的服务器,在用户浏览网页时,控制用户浏览器进行恶意操作的一种攻击方式。
XSS攻击相对而言是一种“古老”的攻击手段,却又历久弥新,不断变化出新的攻击花样,许多以前认为不可能用来攻击的漏洞也逐渐被攻击者利用。因此XSS防攻击也是非常复杂的。主要手段有如下两种。
1、过滤消毒
xss攻击者一般都是通过在请求中嵌入恶意脚本达到攻击的目的&#xff0c;这些脚本是一般用户输入中不使用的&#xff0c;如果进行过滤和消毒处理&#xff0c;即对某些html 危险字符转义&#xff0c;如“>”转义为“>"、“<”转义为“<” 等&#xff0c;就可以防止大部分攻击。为了避免对不必要的内容错误转义&#xff0c;如“3<5”中的“<”需要进行文本匹配后再转义&#xff0c;如“
2、HttpOnly
最早由微软提出&#xff0c;即浏览器禁止页面Javascript访问带有HttpOnly属性的COOKIE。
HttpOnly并不是直接对抗XSS攻击的&#xff0c;而是防止XSS攻击者窃取COOKIE。对于存放敏感
信息的COOKIE,如用户认证信息等&#xff0c;可通过对该COOKIE添加HttpOnly属性&#xff0c;避免被攻击
脚本窃取。
二、注入攻击
注入攻击主要有两种形式&#xff0c;SQL 注入攻击和OS注入攻击。SQL注入攻击的原理如下。攻击者在HTTP请求中注入恶意SQL命令( drop table users;),服务器用请求参数构造数据库SQL命令时&#xff0c;恶意SQL被一起构造&#xff0c;并在数据库中执行。
SQL注入攻击需要攻击者对数据库结构有所了解才能进行&#xff0c;攻击者获取数据库表结构信息的手段有如下几种&#xff1a;比如网站使用了开源的组件、错误提示返回数据结构信息等。常用防御方式有两种&#xff1a;
1、过滤
和防XSS攻击一样&#xff0c;请求参数消毒是一种比较简单粗暴又有效的手段。通过正则匹配&#xff0c;过滤请求数据中可能注入的SQL&#xff0c;如“ drop table" 、“ b(?:updatelb.?bset|deletebW?bfrom)b"等。
2、参数绑定
使用预编译手段&#xff0c;绑定参数是最好的防SQL注入方法。目前许多数据访问层框架&#xff0c;如IBatis, Hibernate等,都实现SQL预编译和参数绑定,攻击者的恶意SQL会被当做SQL的参数&#xff0c;而不是SQL命令被执行。
除了SQL注入&#xff0c;攻击者还根据具体应用&#xff0c;注入OS命令、编程语言代码等&#xff0c;利用程序漏洞&#xff0c;达到攻击目的。
三、CSRF攻击
CSRF ( Cross Site Request Forgery,跨站点请求伪造),攻击者通过跨站请求&#xff0c;以合法用户的身份进行非法操作&#xff0c;如转账交易、发表评论等。CSRF的主要手法是利用跨站请求&#xff0c;在用户不知情的情况下&#xff0c;以用户的身份伪造请求。其核心是利用了浏览器COOKIE或服务器Session策略&#xff0c;盗取用户身份。
相应地&#xff0c;CSRF的防御手段主要是识别请求者身份。主要有下面几种方法。
1、表单token
CSRF是一个伪造用户请求的操作,所以需要构造用户请求的所有参数才可以。表单Token通过在请求参数中增加随机数的办法来阻止攻击者获得所有请求参数:在页面表单中增加一个随机数作为Token,每次响应页面的Token都不相同&#xff0c;从正常页面提交的请求会包含该Token值,而伪造的请求无法获得该值,服务器检查请求参数中Token的值是否存在并且正确以确定请求提交者是否合法。
2、验证码
相对说来&#xff0c;验证码则更加简单有效&#xff0c;即请求提交时&#xff0c;需要用户输入验证码&#xff0c;以避免在用户不知情的情况下被攻击者伪造请求。但是输入验证码是一个糟糕的用户体验&#xff0c;所以请在必要时使用&#xff0c;如支付交易等关键页面。
3、Referer check
HTTP请求头的Referer域中记录着请求来源&#xff0c;可通过检查请求来源,验证其是否合法。很多网站使用这个功能实现图片防盗链(如果图片访问的页面来源不是来自自己网站的网页就拒绝)。
三、其他攻击和漏洞
以上只是列举常见的三种&#xff0c;还有一些其他的也常被黑客利用&#xff0c;比如错误堆栈信息直接返回敏感信息&#xff0c;HTML注释有敏感信息&#xff0c;文件上传只没有限制文件类型&#xff08;黑客上传恶意脚本&#xff09;&#xff0c;路径遍厉等