XXS攻击


欢迎大家访问我的博客dreamITGirl,不要吝啬你们的小星星,点个star~ 有问题的话,你可以将问题在 GitHub问我.

一. 什么是XSS攻击

Cross-Site Scripting(跨站脚本攻击)简称 XSS,是一种代码注入攻击。攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可获取用户的敏感信息如 Cookie、SessionID 等,进而危害数据安全。

二. XSS攻击的分类

最常见的XSS分类:反射型(非持久型)XSS、存储型(持久型)XSS、DOM型XSS、通用型XSS、突变型XSS

  1. 反射型(非持久型)XSS
    反射型XSS简单的把用户输入的数据从服务器反射给用户浏览器,要利用这个漏洞,攻击者必须以某种方式诱导用户访问精心设计的URL(恶意链接),才能实施攻击

    攻击的过程:

    • 攻击者设计出特殊的URL,其中包含恶意代码
    • 当用户打开带有恶意代码的URL时,网站服务端将恶意代码从URL中取出,拼接在HTML中,并将内容返回给浏览器
    • 用户浏览器接收到响应后解析执行,混在其中的恶意代码也会被执行
    • 恶意代码会窃取用户的数据信息并发送到攻击者的网站或者冒出用户行为,调用网站的接口执行非用户本意(攻击者指定)的操作
      反射型(非持久型)XSS攻击过程
  2. 存储型(持久型)XSS
    存储型(持久型)XSS最常发生在由社区内容驱动的网站或Web邮件网站,不需要通过URL链接来执行。黑客仅需要提交XSS漏洞利用代码到一个网站上其他用户可能访问的地方。这些地方可能会是 评论留言板聊天室HTML电子邮件等其他许多地方,如果用户一旦感染了存储型XSS,执行就是自动的 。

    攻击的过程:

    • 攻击者将恶意代码提交到目标网站的数据库中
    • 当用户打开目标网站时,服务端将恶意代码从数据库取出,并拼接在HTML中返回给浏览器
    • 浏览器接收到服务端响应的数据后开始解析,同时恶意代码也会被执行
    • 恶意代码会窃取用户数据,并发送到攻击者的网站,调用目标网站执行攻击者指定的操作

    这种操作常见于用户保存数据的功能。
    存储型(非持久型)XSS攻击过程

    反射型 XSS 跟存储型 XSS 的区别是:存储型 XSS 的恶意代码存在数据库里,反射型 XSS 的恶意代码存在 URL 里。

  3. DOM型XSS
    通过修改页面的DOM节点形成XSS攻击,不需要经过服务器的参与。属于JS自身的安全漏洞。

    攻击的过程:

    • 攻击者构造出特殊的URL,包括恶意代码
    • 用户打开带有恶意代码的URL
    • 浏览器收到响应后解析代码,前端JS解析代码并执行
    • 恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。

三. XSS攻击预防

  1. XSS攻击的主要因素:
    • 攻击者提供恶意代码
    • 浏览器解析恶意代码
1.1 httponly 防止窃取cookie

使用httponly 可以使浏览器禁止页面中的JS访问浏览器中的带有httponly 的 Cookie。

攻击者可以通过注入恶意脚本获取用户的 Cookie 信息。通常 Cookie 中都包含了用户的登录凭证信息,攻击者在获取到 Cookie 之后,则可以发起 Cookie 劫持攻击。所以,严格来说,HttpOnly 并非阻止 XSS 攻击,而是能阻止 XSS 攻击后的 Cookie 劫持攻击。

1.2 输入检查

前端可以将传给后台的数据中包含'>'、'<'等特殊字符进行转义或者过滤编码。

1.3 输出检查

除了富文本编辑器的输出外,在变量输出HTML时,可以通过sanitize-html对HTML进行有规则的过滤后再输出到页面

1.4 输入长度的限制

对于不信任的输入,需要设置一个合理的长度,这样虽然无法完全防御XSS,但是可以增加XSS的攻击难度

1.5 验证码

防止脚本冒出用户提交危险操作

参考资源

  1. 美团技术团队
  2. 前端安全系列一