网络防御
网站应用攻击最主要的两个手段:XSS攻击和 SQL注入攻击。此外,常用的 Web应用还包括 CSRF、Session 劫持等手段。
一、XSS 攻击
XSS 攻击即跨站点脚本攻击(Cross Site Script),指黑客通过篡改网页,注入恶意 HTML 脚本,在用户浏览网页时,控制用户浏览器进行恶意操作的一种攻击方式。
常见 XSS 攻击有两种,第一种是反射型,用户点击的链接中被黑客嵌入了恶意脚本,达到攻击的目的。如下图所示:攻击者可以采用XSS 攻击,偷取用户Cookie、密码等重要数据,伪造用户身份与 Web应用程序交互,从而盗取用户财产、窃取情报。
第二种攻击方式是:持久型 XSS 攻击,黑客提交含有恶意脚本的请求,保持在被攻击的 Web 站点的数据库中,用户浏览网页时,恶意脚本被包含在正常页面中,达到攻击的目的,如下图:这种攻击经常使用 在论坛,博客等Web应用中。
二、XSS 防御手段
【1】消毒:XSS 攻击者一般都是通过在请求中嵌入恶意脚本达到攻击的目的,这些脚本一般用户输入中不会出现,可以对输入进行过滤和消毒处理,即对某些 html 危险字符转义,如">"转义为“>”,"<" 转义为"&It"等,就可发防止大部分攻击。为了避免对不必要的内容错误转义,如“3<5”中的“<”需要进行文本匹配后再转义,如“<img src=”这样的上下文中的“<”才转义。事实上消毒是所有网站最必备的 XSS 防攻击手段。
【2】HttpOnly:最早由微软提出,即浏览器禁止页面 JavaScript 访问带有 HttpOnly 属性的 Cookie。HttpOnly 并不是直接对抗 XSS 攻击的,而是防止 XSS 攻击者窃取 Cookie。对于存放敏感信息的 Cookie,如有用户认证信息等,可通过对该 Cookie 添加 HttpOnly 属性,避免被攻击脚本窃取。设置如下:
response.setHeader("Set-Cookie", "cookiename=value;Path=/;Domain=domainvalue;Max-Age=seconds;HTTPOnly");
如果需要访问Cookie 信息可以通过如下方式访问:
Cookie cookies[]=request.getCookies();
三、注入攻击
注入攻击主要有两种,SQL 注入攻击和 OS 注入[指程序提供了直接执行 Shell 命令的函数的场景]攻击。SQL 注入攻击的原理如下图所示:攻击者在 HTTP 请求中注入恶意 SQL 命令(drop table users),服务器用请求参数构造数据库 SQL 命令时,恶意 SQL 被一起构造,并在数据库中执行。
四、SQL 注入防御措施
首先避免被攻击者猜测到表名等数据库表结构信息:
【1】消毒:和防止 XSS 攻击一样,请求参数消毒是一种比较有效的手段。通过正则匹配,过滤请求数据中可能注入的 SQL。
【2】参数绑定:使用预编译手段,绑定参数是最好的防 SQL 注入方法,目前许多数据访问层框架,如 MyBatis,Hibernate等,都实现 SQL 预编译和参数绑定,攻击者的恶意 SQL 会被当做 SQL 的参数,而不是 SQL 命令被执行。
除了 SQL 注入,攻击者还根据具体应用,注入 OS 命令,编程语言代码等,利用程序漏洞,达到攻击目的。
五、CSRF 攻击
CSRF(Cross Site Request Forgery,跨站点请求伪造),攻击者通过跨站请求,以合法用户的身份进行非法操作,如转账交易、发表评论等,如下图所示:CSRF 的主要手段是利用跨站点请求,在用户不知情的情况下,以用户的身份伪造请求,其核心是利用了浏览器Cookie 或服务器 Session 策略,盗取用户身份。