XSS (Cross-site scripting)攻击,即跨站脚本攻击。
攻击者通过在受害者的浏览器中注入恶意代码,攻击受害者的登录凭证、盗取敏感信息或控制受害者的会话等。
XSS攻击是很场景的Web应用攻击类型。
根据攻击者的角色和攻击载体,XSS攻击可以分为三种类型:
攻击载体 | 攻击者角色 | |
---|---|---|
反射型XSS攻击 | 攻击者制作的网页或链接 | 能够诱发被攻击者打开某个网页的人员 |
存储型XSS攻击 | 攻击者与被攻击者共同使用的Web应用 | 要攻击的网站的用户 |
DOM型XSS攻击 | 目标网站的DOM元素被恶意修改 | 普通用户 |
反射型XSS攻击是将注入的恶意脚本添加到一个网址中,然后给用户发送这个网址。一旦用户打开这个网址,就会执行脚本并导致攻击。攻击负载和脚本跟随用户点击链接,并被嵌入到响应中,在浏览器上执行。
(1) 攻击者针对www.example.com的一个搜索页定制下面链接
http://www.example.com/search?query=<script>alert('XSS')</script>
(2) 攻击者将连接发送给被攻击者
(3) 被攻击者点开链接后,会执行嵌入的XSS脚本,从而实现攻击者的意图。(比如后去用户Session)
从Web应用搭建的维度,可以通过下列措施防范XSS攻击
从用户的角度,可以通过下列措施防范XSS攻击
存储型 XSS 攻击指的是攻击者将恶意脚本提交到受害网站的数据库中,当其他用户浏览包含该恶意脚本链接的页面时,就会执行该脚本,从而导致攻击者的目的得以实现。
由于是将恶意脚本保存在数据库中,所有访问包含恶意代码的页面的用户都受到攻击。而且这种攻击方式难解决。
(1)攻击者在受害网站上查找存在漏洞的输入表单,例如评论框或搜索框等。
(2)攻击者将恶意代码或脚本插入到输入表单中,以便在提交表单时存储到数据库中。例如,攻击者可以在评论框中插入一段 JavaScript 代码,用于窃取存储在 Cookie 中的会话标识符。
(3)网站接收到含有恶意代码的表单数据,将其存储到数据库中。此时,攻击者的恶意代码已经写入到数据库中并保存下来。
(4)受害用户访问这个包含恶意代码的页面时,恶意代码从数据库中提取出来并在受害用户的浏览器上执行,触发攻击者设定的操作。
(5)攻击者利用受害用户的会话标记等获取受害者的身份和敏感信息。例如,可以利用恶意脚本窃取用户的个人信息、登录凭据或信用卡信息,并发送给攻击者。
存储型 XSS 攻击通常比反射型 XSS 攻击更难防止。以下是几种常见的防御措施:
存储型XSS攻击最好的防御措施是:
永远不要相信前端,永远不要相信用户的输入。
DOM 型 XSS 攻击是一种利用 DOM 基于 HTML 解析过程中的安全漏洞进行的跨站攻击。
DOM 型 XSS 攻击不涉及服务器的参与,完全基于客户端的机制,攻击者通过篡改网页中的 DOM 元素和属性,注入恶意代码进而达到攻击目的。
DOM型XSS攻击的过程与反射型XSS攻击极其类似,主要差异在于反射型XSS会把攻击脚本传递给服务器,而DOM型XSS不需要,从而可以达到绕过WAF、躲避服务端的检测效果。
DOM型XSS攻击通常分为以下几个步骤:
DOM型XSS攻击可以通过下面的措施进行防御:
XSS攻击可以分为三种类型:反射型XSS攻击、存储型XSS攻击以及DOM型XSS攻击。
反射型XSS攻击是将攻击脚本注入到URL中,服务器解析时将注入代码反射到浏览器中,从而实现攻击目的。
存储型XSS攻击是攻击者将恶意脚本代码提交到受害网站的数据库中,当其他用户浏览包含该恶意脚本链接的页面时,就会执行该脚本,从而导致攻击者的目的得以实现。
DOM 型 XSS 攻击则是一种利用 DOM 基于 HTML 解析过程中的安全漏洞进行的跨站攻击,攻击者通过篡改网页中的 DOM 元素和属性,注入恶意代码从而窃取用户的敏感信息或实施其他违法操作。
针对上述三种XSS攻击,开发者应该实施多项安全措施。比如对输入和输出数据进行过滤和编码,限制用户的输入内容及长度、格式等,避免直接将用户输入内容放到 innerHTML 函数中;采用Content Security Policy(CSP)等安全措施来防御DOM型XSS攻击;使用安全沙箱、限制访问控制、升级浏览器等应对反射型 XSS 和存储型 XSS 攻击。开发者需要加强对 Xss攻击的了解及安全方案的实施,保护用户的网络安全。