XSS
是英文 Cross-Site Scripting 的缩写。
![](https://img.haomeiwen.com/i16053824/e2beeca4cad3eb7a.png)
简单来说
- 正常用户 A 提交正常内容,显示在另一个用户 B 的网页上,没有问题
- 恶意用户 H 提交恶意内容,显示在另一个用户 B 的网页上,对B 的网页随意篡改。
造成 XSS 有几个要点
- 恶意用户可以提交内容
- 提交的内容可以显示在另一个用户的页面上
- 这些内容未经过过滤,直接运行在另一个用户的页面上
举例说明
假设我们有一个评论系统
用户 A 提交评论 【小明你好】到服务器,然后用户 B 来访问网站,看到了 A 的评论 【小明你好】,这里没有 XSS
恶意用户 H 提交评论【<script>console.log(document.cookie)</script>】, 然后用户 B 来访问网站,这段脚本在 B 的浏览器直接执行,恶意用户 H 的脚本就可以任意操作 B 的 cookie ,而 B 对此毫无察觉,有了 cookie, 恶意用户 H 就可以伪造 B 的登录信息,随意访问 B 的隐私了,而 B 始终被蒙在鼓里。
XSS 的成因以及如何避免
继续上面的例子,之所以恶意脚本能直接运行,有两个可能
- 后台模板问题
<p>
评论内容:<?php echo $content;?>
</p>
$content 的内容,没有经过任何过滤,原样输出。
- 前端代码问题
$p.html(content)
或者
$p = $('<p>' + content + '</p>')
content 内容又被原样输出了,解决办法就是不要自己拼 HTML ,尽量使用 text 方法,如果一定要使用 HTML 就把可疑符号变成 HTML 实体
代码示例
输入 <script>alert(1)</script> , 提交,会作为 html 执行这段代码,显示弹窗。
作者:一棵树4
链接:https://www.jianshu.com/p/52e5f22beb80
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
网友评论