1.内容
攻击者在web网页中插入恶意js代码,当用户浏览该浏览器页面的时候,嵌入web中的js代码会被执行,从而受到恶意攻击,这就是跨站脚本攻击。xss脚本植入方式前台接收数据存入数据库,在渲染页面时从数据库中读取相应信息
2>分类
1)反射性的xss:发出请求时,XSS代码出现在URL中,作为输入提交到服务器端,服务器端解析后响应,XSS代码随响应内容一起传回给浏览器,最后浏览器解析执行XSS代码。这就是反射性的xss
2)存储形的xss:存储型XSS和反射型XSS的差别仅在于存储性xss提交的代码会存储在服务器端,下次请求目标页面时不用再提交XSS代码
比较典型的例子是留言板XSS,用户提交一条包含XSS代码的留言存储到数据库,目标用户查看留言板时,那些留言的内容会从数据库查询出来并显示,浏览器发现有XSS代码,就当做正常的HTML与Js解析执行,于是触发了XSS攻击。
3)DOM XSS:DOM XSS和反射型XSS、存储型XSS的差别在于DOM XSS的代码并不需要服务器参与,触发XSS靠的是浏览器端的DOM解析,完全是客户端的事情。
<script>
eval(location.hash.substr(1));
</script>
触发方式为:http://www.a.com/xss/domxss.html#alert(1)
3>防御
XSS防御的总体思路是:对输入和URL参数进行过滤,对输出进行编码。
1.对输入和URL参数进行过滤(白名单和黑名单)
黑名单:黑名单是列出不能出现的对象的清单,一旦出现就进行处理
白名单:白名单是列出可被接受的内容,一般使用白名单,它比较严格
2.对输出进行编码
输出数据之前对潜在的威胁的字符进行编码、转义,比如:在html中对<,>,&,’,”进行转义为< 转成 <> 转成 >& 转成 &" 转成 "
' 转成 '
<span>${username}</span>, <p><c:out value="${username}"></c:out></p>
<input type="text" value="${username}" />
3.csp内容安全策略(Content Security Policy)
1》定义:
他跟转义不一样,它实际上是定义页面上哪一些内容是可被信任的,哪一些内容是不被信任的。因为我们自己的脚本是预先就知道并放在页面上的,所以我们可以设置好信任关系,当有 XSS 脚本出现时,它并不在我们的信任列表中,因此可以阻止它运行。
2》使用方法
它的具体使用方式是在 HTTP 头中输出 CSP 策略:
Content-Security-Policy: <policy-directive>; <policy-directive>
从语法上可以看到,一个头可以输出多个策略,每一个策略由一个指令和指令对应的值组成。指令可以理解为指定内容类型的,比如script-src指令用于指定脚本,img-src用于指定图片。值则主要是来源,比如某个指定的URL,或者self表示同源,或者unsafe-inline表示在页面上直接出现的脚本等。
3》缺点
CSP 来处理 XSS 攻击还是不如转义来得优雅,因为转义可以不影响用户输入输出,不改变内容的本质。但是 CSP 提供了足够简单而又灵活的方式来防御 XSS ,可以很好地作为我们前端 XSS 防御的最后一道防线。
4》例子
Content-Security-Policy: script-src 'self';
这样除了在同一个域名下的JS文件外,其它的脚本都不可以执行了,自然之前 XSS 的内容也就失效啦。
4>HttpOnly 与 XSS防御
1》内容
对于一些敏感的Cookie我们采用HttpOnly,对于一些需要在应用程序中用js操作的cookie我们就不予设置,这样就保障了Cookie信息的安全也保证了应用。
这样做的原因是因为XSS 一般利用js脚本读取用户浏览器中的Cookie,如果你设置了HttpOnly,你在浏览器的 document对象中就看不到Cookie了,而我们获取cookie是从document对象中获得的,但是浏览器在浏览的时候不受任何影响。
2》使用方式
cookie.setHttpOnly(true);
csrf和xss的区别
1. 原理不同
XSS攻击是攻击者在web网页中插入恶意js代码,当用户浏览该浏览器页面的时候,嵌入web中的js代码会被执行,从而受到恶意攻击,
CSRF攻击是挟持用户在当前已登录的Web应用程序上执行非本意的操作的一种攻击方式。
2. 发生场景不同
XSS攻击是用户登录某网站,在该网站做其他操作时发生的;
CSRF攻击是用户登录网站A,没注销的时间段内登录不安全的网站B时发生的;
3.直接导致攻击结果的主体不同
XSS攻击,攻击者获取了用户的身份信息后,攻击者进行后续操作导致攻击结果;
CSRF攻击,攻击者在用户浏览不安全网站时主动导致攻击结果是强迫浏览器发起攻击。
4.csrf比xss更难防范和危险