XSS攻击及其解决方案

来源:互联网 发布:国税数据质量整改 编辑:程序博客网 时间:2024/05/12 16:15

一、什么是XSS跨站脚本攻击

  XSS跨站脚本攻击一直都被认为是客户端Web安全中最主流的攻击方式。因为Web环境的复杂性以及XSS跨站脚本攻击的多变性,使得该类型攻击很难彻底解决。那么,XSS跨站脚本攻击具体攻击行为是什么,又该如何进行有效的防范呢?本文对此进行了有针对性的具体实例分析。
  跨站脚本攻击(Cross Site Scripting)是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。为了与层叠样式表(Cascading Style Sheets)的缩写CSS区分开,跨站脚本攻击通常简写为XSS。

二、XSS跨站脚本攻击的分类

1、 反射型XSS

  反射型XSS脚本攻击是简单地将用户输入的数据直接或未经过完善的安全过滤就在浏览器中进行输出,导致输出的数据中存在可被浏览器执行的代码数据。由于此种类型的跨站代码存在于URL中,所以黑客通常需要通过诱骗或加密变形等方式,将存在恶意代码的链接发给用户,只有用户点击以后才能使得攻击成功实施。
  

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><!DOCTYPE><html><head></head><body>    欢迎你:<%=request.getParameter("name")%></body></html>

当我们输入网址 ReflectXSS.jsp?name=<script>alert("你被XSS攻击了")<script>的时候 , 就会执行恶意代码。事实上,对于这种入门级的攻击方式,现代浏览器都是做了过滤的,比如在谷歌浏览器中的,会报错:

The XSS Auditor refused to execute a script in 'http://localhost:8080/TestSecurity/ReflectXSS.jsp?name=%3Cscript%3Ealert()%3Cscript%3E' because its source code was found within the request. The auditor was enabled as the server sent neither an 'X-XSS-Protection' nor 'Content-Security-Policy' header.

IE浏览器也作出了提示:
IE浏览器的提示

2、存储型XSS

  存储型XSS脚本攻击是指Web应用程序会将用户输入的数据信息保存在服务端的数据库或其他文件形式中,网页进行数据查询展示时,会从数据库中获取数据内容,并将数据内容在网页中进行输出展示,因此存储型XSS具有较强的稳定性。
  存储型XSS脚本攻击最为常见的场景就是在博客或新闻发布系统中,黑客将包含有恶意代码的数据信息直接写入文章或文章评论中,所有浏览文章或评论的用户,都会在他们客户端浏览器环境中执行插入的恶意代码。如流行的Bo-Blog程序的早期版本中存在对用户提交评论数据过滤不严导致的XSS跨站脚本攻击漏洞,黑客可以在文章评论中提交插入恶意数据的UBB代码,提交后,Bo-Blog程序会将数据保存至数据库中,当用户浏览该日志时,就会执行插入的恶意代码。

3、基于DOM的XSS

  基于DOM的XSS跨站脚本攻击是通过修改页面DOM节点数据信息而形成的XSS跨站脚本攻击。不同于反射型XSS和存储型XSS,基于DOM的XSS跨站脚本攻击往往需要针对具体的javascript DOM代码进行分析,并根据实际情况进行XSS跨站脚本攻击的利用。
  

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><html><head><title>DOM Based XSS Demo</title><script>    function xsstest()    {        var str = document.getElementById("input").value;        document.getElementById("output").innerHTML = "<img src='"+str+"'></img>";    }</script></head><body>    <div id="output"></div>    <h3>请输入图片url</h3>    <input type="text" id="input" size=50 value="" />    <input type="button" value="提交" onclick="xsstest()" /></body></html>

  以上代码的作用是提交一个图片的URL地址以后,程序会将图片在页面中进行展示,如我们提交百度LOGO图片的地址 http://www.baidu.com/img/baidu_sylogo1.gif
  提交百度图片链接的结果
黑客可以通过构造如下数据,输入 #’ onerror=’javascript:alert(/你被XSS攻击/)

三、XSS的防范措施

  XSS的防范措施归根结底就是对输入的内容进行编码,使其只发挥字符串的作用,而不发挥标签或者可执行脚本的作用,推荐看一篇文章
  XSS防御的7条原则
  另外还有一些很多现成的框架如Encoder.js , CSL , ESAPI , Smarty等等。

0 0