Web 安全 - 跨站脚本攻击 XSS 三种类型及防御措施

Web 安全 - 跨站脚本攻击 XSS 三种类型及防御措施
最新回答
死亡与爱

2023-10-04 23:16:55

XSS(Cross Site Scripting)是一种代码注入方式的跨站脚本攻击,其三种类型及防御措施如下:

XSS攻击三种类型
  1. 存储型 XSS 攻击

    定义:将恶意代码存储到网站服务器,如果出现漏洞传播速度、影响范围较为广泛,常见于社区、论坛等带有内容保存的系统中。

    原理:黑客利用网站漏洞将恶意代码发送至服务器,服务器未经校验就保存了。其他用户通过浏览器向网站服务器请求内容,浏览器解析恶意代码并执行,黑客的意图就成功了。

    示例:黑客将恶意代码嵌入到论坛的帖子中,当其他用户浏览该帖子时,恶意代码被执行,导致用户信息被窃取或页面被篡改。

  2. 反射型 XSS 攻击

    定义:将恶意代码拼接在 URL 处,常见于网站搜索、跳转等,一个特点是需要黑客诱导用户点击 URL 实现代码注入。

    原理:黑客在 URL 处拼接一段恶意代码,当请求到达网站服务端后,从 URL 取出这段恶意代码,如果不做任何处理直接拼接在 HTML 处返回,浏览器收到内容解析执行,混淆在正常内容中的恶意代码也会被执行。

    示例:黑客构造一个包含恶意代码的 URL,并诱导用户点击。用户点击后,恶意代码被注入到页面中并执行,导致用户信息被窃取或页面被篡改。

  3. 基于 DOM XSS 攻击

    定义:不涉及网站服务器,通常是由于前端页面不严谨的代码产生的安全漏洞,导致注入了恶意代码。

    原理:在使用 .innerHTML、document.write()、document.outerHTML 这些能够修改页面结构的 API 时,如果没有对输入进行充分的校验和转义,就可能导致恶意代码被注入并执行。

    示例:黑客构造带有恶意代码的 URL 诱导用户打开,浏览器收到请求后解析执行,如果使用 document.write() 未经转义输出,就可能遭到攻击。

XSS 防御措施
  1. 确定性类型字段加强校验

    对于一些确定性类型的字段(如手机号、邮箱等),在输入内容时应按照相应规则加强校验,确保输入内容符合预期格式,从而避免恶意代码的注入。

  2. HTML 模版转义

    对于前后端一体的应用,拼接 HTML 模版时应对输入内容进行充分转义,防止恶意脚本注入成功并在浏览器端执行。一些常用的模版引擎(如 pug、ejs 等)默认都带有转义功能,可以有效防止 XSS 攻击。

  3. 设置 httpOnly

    通过设置 cookie 的 httpOnly 属性,禁止用户读取 cookie,即使注入恶意代码,也无法读取 cookie 信息冒充用户提交信息,从而增强系统的安全性。

  4. 过滤和转码

    对用户输入的关键字符进行过滤或转码,防止恶意脚本的注入。例如,可以将 <script> 标签转义为 &lt;script&gt;,从而避免其被浏览器解析为可执行代码。此外,还可以使用专门的库(如 js-xss)对用户输入的内容进行过滤,以避免遭受 XSS 攻击。

  5. CSP(内容安全策略)

    CSP 是一种内容安全策略,需要在服务端设置。通过指定有效的来源,CSP 可以防止跨站脚本攻击、点击劫持攻击等。例如,可以设置 CSP 只允许加载来自特定域的脚本和样式表,从而防止恶意代码的注入和执行。

综上所述,XSS 攻击是一种常见的网络安全威胁,但通过加强输入校验、HTML 模版转义、设置 httpOnly、过滤和转码以及实施 CSP 等防御措施,可以有效降低其风险并保护用户信息的安全。