网站的攻击类型和防御

1、XSS攻击
XSS攻击即跨站点脚本攻击,指黑客通过篡改网页,注入恶意HTML脚步,在用户浏览网页时,控制用户浏览器进行恶意操作的一种攻击方式。
【网站的攻击类型和防御】常见的XSS攻击类型有两种,一种是反射型,攻击者诱使用户点击一个嵌入恶意脚本的链接,达到攻击的目的。另外一种XSS攻击是持久型XSS攻击,黑客提交含有恶意脚本的请求,保存在被攻击的Web站点的数据库中,用户浏览网页时,恶意脚本被包含在正常网页中,达到攻击的目的。
防御XSS攻击主要手段有以下几种:
(一)消毒 XSS攻击者一般都是通过在请求中嵌入恶意脚本达到攻击的目的的,这些脚本是一般用户输入中不使用的,如果进行过滤和消毒处理,即对某些HTML危险字段字符转义,就可以防止大部分攻击。
(二)HttpOnly 最早由微软提出,即浏览器禁止页面JavaScript访问带有HttpOnly属性的Cookie。HttpOnly并不是直接对抗XSS攻击的,而是防止XSS攻击者窃取Cookie。对于存放敏感信息的Cookie,如用户认证信息等,可通过对该Cookie添加HttpOnly属性,避免被攻击脚本窃取。
2、注入攻击
注入攻击主要有两种形式,SQL注入攻击和OS注入攻击,SQL注入攻击的原理是攻击者在HTTP请求中注入恶意SQL命令,服务器用请求参数构造数据库SQL命令时,恶意SQL被一起构造,并在数据库中执行。
SQL注入攻击需要攻击者对数据库结构有所了解才能进行,攻击者后去数据库表结构信息的手段有如下几种:
(一)开源 如果网站采用开源软件搭建,如用Discuz搭建论坛网站,那么网站数据库结构就是公开的,攻击者可以直接获得。
(二)错误回显 如果网站开启错误回显,即服务器内部500错误回显示到浏览器上。攻击者通过故意构造非法参数,使服务端异常信息输出到浏览器,为攻击猜测数据库表结构提供过了便利。
(三)盲注 网站关闭错误回显,攻击者根据页面变化情况判断SQL语句的执行情况,据此猜测数据库表结构,此种方式攻击难度较大。
3、注入防护
防御SQL注入攻击首先要避免被攻击者猜测到表名等数据库表结构信息,此外还可以采用如下方法:
(一)消毒 和防御XSS攻击一样,请求参数消毒是一种比较简单除暴又有效的手段。通过正则匹配,过滤请求数据中可能注入的SQL。
(二)参数绑定 使用预编译手段,绑定参数是最好的防SQL注入方法。目前许多数据访问层框架都实现SQL预编译和参数绑定,攻击者的恶意SQL会被当做SQL的参数,而不是SQL命令被执行。
除了SQL注入,攻击者还根据具体应用,注入OS命令、编程语言代码等,利用程序漏洞,达到攻击目的。
4、CSRF攻击
CSRF(跨站点请求伪造),攻击者通过跨站请求,以合法用户的身份进行非法操作。CSRF的主要手法是利用跨站请求,在用户不知情的情况下,以用户的身份伪造请求。其核心是利用了浏览器Cookie或服务器Session策略,盗取用户身份。
相应地,CSRF的防御手段主要是识别请求者身份。主要有下面几种方法:
(一)表单token CSRF是一个伪造用户请求的操作,所以需要构造用户请求的所有参数才可以。表单token通过在请求参数中增加随机数的办法来阻止攻击者获得所有请求参数:在网页表单中增加一个随机数作为token,每次响应网页的token都不相同,从正常页面提交的请求会包含该token值,而伪造的请求无法获得该值,服务器检查请求参数中token的值是否存在并且正确以确定请求提交者是否合法。
(二)验证码 相对来说,验证码则更加简单有效,即请求提交时,需要用户输入验证码,以避免在用户不知情的情况下被攻击者伪造请求。但是输入验证码是一个糟糕的用户体验,所以请在必要时使用。
(三)Referer check HTTP请求头的Referer域中记录着请求来源,可通过检查请求来源,验证其是否合法。很多网站使用这个功能实现图片防盗链。
5、其他攻击和漏洞
5.1、error code 也称作错误回显,许多Web服务器默认是打开异常信息输出的,即服务器端未处理的异常堆栈信息会直接输出到客户端浏览器,这种方式虽然对程序调试和错误报告有好处,但同时也给黑客造成可乘之机。通过故意制造非法输入,使系统运行时出错,获得异常信息,从而寻找系统漏洞进行攻击。防御手段也很简单,通过配置Web服务器参数,跳转500页面到专门的错误页面即可,Web应用常用的MVC框架也有这个功能。
5.2、HTML注释 为调试程序方便或其他不恰当的原因,有时程序开发人员会在PHP、JSP等服务器页面程序中使用HTML注释语法进行程序注释,这些HTML注释就会显示在客户端浏览器,给黑客造成攻击便利。程序最终发布前需要进行代码review或自动扫描,避免HTML注释漏洞。
5.3、文件上传 一般网站都会有文件上传功能,设置头像、分享视频、上传附件等。如果上传的是可执行的程序,并通过该程序获取服务器端命令执行能力,那么攻击者几乎可以在服务器上为所欲为,并以此来跳板攻击集群环境的其他机器。最有效的防御手段是设置上传文件白名单,只允许上传可靠的文件类型。此外还可以修改文件名、使用专门的存储等手段,保护服务器免受上传文件攻击。
5.4、路径遍历 攻击者在请求的URL中使用相对路径,遍历系统未开发的目录和文件。防御方法主要是将JS、CSS等资源文件部署在独立服务器、使用独立域名,其他文件不使用静态URL访问,动态参数不包含文件路径信息。

    推荐阅读