网站应用常见攻击类型与防御措施

网络安全威胁一直伴随着互联网的发展,针对网站应用的各种攻击从未停止过,各种信息泄露事件层出不穷。从开房纪录泄露贩卖到新浪微博遭XSS攻击,多个大型商业网站和社区网站的用户密码和个人信息糟到泄露。企业网站一般被攻击后,要么是被挂马,要么是数据库被篡改,黄色网站和赌博网站等一些非法的东西就会借着合法的壳趁虚而入。对于正在打广告的企业网站来说,无论从影响或者广告费来说,都是一个不小的损失。

几种常见的攻击网站的方式

一、XSS攻击

XSS攻击即跨站点脚本攻击( Cross Site Script)。黑客通过篡改网页、注入脚本后保存在网站的服务器文件目录下,当用户浏览网页时,通过控制用户浏览器进行恶意操作的一种攻击方式。

XSS攻击通过不断变化攻击方式,利用漏洞对网站进行攻击,主要有两个方面的措施:

1、过滤消毒

XSS攻击者一般都是通过在请求中嵌入恶意脚本达到攻击的目的,这些脚本是一般用户输入中不使用的,如果进行过滤和消毒处理,对某些html 危险字符转义就可以防止大部分攻击。

2、HttpOnly

浏览器禁止页面JavaScript访问带有HttpOnly属性的Cookie。
HttpOnly可以防止XSS攻击者窃取Cookie。对于存放敏感
信息的Cookie,可通过对该Cookie添加HttpOnly属性,避免被攻击脚本窃取。

二、注入攻击

注入攻击主要有两种形式:SQL 注入攻击和OS注入攻击。

SQL注入,攻击者在HTTP请求中注入恶意SQL命令,当服务器用请求参数构造数据库SQL命令时,恶意SQL被一起构造,并在数据库中执行。

SQL注入攻击需要攻击者对数据库结构非常了解才能顺畅进行,攻击者通过获取数据库表结构信息对SQL命令修改伪造,让其跟着在数据库中执行以达到目的。

防御措施:

1、过滤

和防XSS攻击一样,请求参数消毒是一种比较简单粗暴又有效的手段。通过正则匹配,过滤请求数据中可能注入的SQL,就可以避免。

2、参数绑定

使用预编译手段,绑定参数是最好的防SQL注入方法。目前许多数据访问层框架,如IBatis、Hibernate等,都实现SQL预编译和参数绑定,攻击者的恶意SQL会被当做SQL的参数,而不是SQL命令被执行。

除了SQL注入,攻击者还根据具体应用,注入OS命令、编程语言代码等,利用程序漏洞,达到攻击目的。

三、CSRF攻击

CSRF ( Cross Site Request Forgery,跨站点请求伪造)。攻击者通过跨站请求,以合法用户的身份进行非法操作,如转账交易、发表评论等行为。CSRF的主要手法是利用跨站请求,在用户不知情的情况下,以用户的身份伪造请求。其核心是利用了浏览器Cookie或服务器Session策略,盗取用户身份。

针对CSRF攻击的防御手段主要是识别请求者身份:

1、表单token

CSRF是一个伪造用户请求的操作,所以需要构造用户请求的所有参数才可以。表单Token通过在请求参数中增加随机数的办法来阻止攻击者获得所有请求参数:在页面表单中增加一个随机数作为Token,每次响应页面的Token都不相同,从正常页面提交的请求会包含该Token值,而伪造的请求无法获得该值,服务器检查请求参数中Token的值是否存在并且正确以确定请求提交者是否合法。

2、验证码

相比token,验证码更加简单有效,即请求提交时,需要用户输入验证码,以避免在用户不知情的情况下被攻击者伪造请求。但是输入验证码是一个糟糕的用户体验,所以请在必要时使用,如支付交易等关键页面。

3、Referer check

HTTP请求头的Referer域中记录着请求来源,可通过检查请求来源,验证其是否合法。很多网站使用这个功能实现图片防盗链(如果图片访问的页面来源不是来自自己网站的网页就拒绝)。

四、其他攻击和漏洞

以上只是列举常见的三种,还有一些其他的也常被黑客利用,比如错误堆栈信息直接返回敏感信息,HTML注释有敏感信息,文件上传只没有限制文件类型(黑客上传恶意脚本),路径遍厉等