什么是XSS?

XSS是Cross-Site Scripting(跨站脚本攻击)的简称。它是通过在目标网站注入恶意的脚本,使其在用户的浏览器上执行,恶意的脚本在执行过程中可能会发送用户cookie信息或者session给攻击者。通过这种攻击方式,可以获取用户的敏感信息,如密码。

为了和 CSS 区分,这里把攻击的第一个字母改成了 X,于是叫做 XSS。

XSS攻击的三种形式?

根据XSS攻击的方式分为三种类型:

  1. 存储型XSS
    image.png

 

  1. 反射型XSS

 image.png
 反射型XSS的关键在于将请求发送到web服务器时,恶意代码是作为参数的一部分。

  1. DOM型XSS

 与存储型XSS与反射型XSS的不同,存储型XSS和反射型XSS关注的是恶意代码的来源,而Dom型XSS关注的是恶意代码是如何能够执行的。
 DOM指的是Document Object Model(文档对象模型)的简称,JavaScript在修改浏览器页面的元素的时候就是通过修改DOM中的元素来实现的。

如上是来自w3c的图片,如我们需要修改<a>标签对应的链接,我们就只需要修改DOM文档中对应的<a>标签。

存储型XSS和反射型XSS是不是都是Dom型XSS呢?
  存储型XSS并不一定是Dom型Xss,比如攻击者将恶意代码提交都web服务器,但是web服务器采用JSP这类
  技术时,恶意代码在后台就直接输出到了HTML中,不会再在前台修改DOM。
  同理,反射型XSS将恶意代码提交到了web服务器,同事web服务器也采用JSP这类技术时,恶意代码在
  后台就会直接拼接到了HTML中,不会再在前台修改DOM。
  所以存储型XSS和DOM型XSS都不完全是Dom型XSS。
  
为什么网上很多资料说dom型xss属于反射型xss?
    反射型xss主要是指恶意代码作为web请求的参数传送到web服务器之后,浏览器打开新的页面时执行
    恶意代码。在web服务器没有使用类似于JSP这类技术时,web请求完之后,请求参数可能会通过DOM的
    形式注入。所以说DOM型XSS是反射型XSS中的一种。

如何预防XSS?

预防XSS攻击有几个关键点

  1. 防止用户提交的恶意代码生效
    使用转义可以在一定程度上防止恶意代码生效。通常攻击者注入的代码都需要使用 & < > " ' /等字符来截断前面代码段。所以我们可以对这些字符进行转义。

      & --> &amp;
      < --> &lt;
      > --> &gt;
      " --> &quot;
      ' --> &#x27;     
      / --> &#x2F;     
  2. 防止浏览器执行恶意代码
    防止浏览器执行恶意代码可以使用纯前端渲染。
  3. 防止恶意代码获取用户的敏感信息
    设置HTTP-ONLY可以限制JavaScript不能获取Cookie。

参考:
FreeBuf 文章:如何防止XSS攻击?
Cross Site Scripting Prevention Cheat Sheet


水一水
39 声望5 粉丝

总结经验,提升自己


引用和评论

0 条评论