再说XSS之前,我们先说个小故事。
有一天小红在服务器上提交了一个评论:“博主真帅啊!”,此时小明访问该页面,看见了小红的评论,心想:“这人眼光太差了,让我会会她!”,此时小明在页面提交了一条评论:
<script>
console.log(document.cookie)
</script>
这时小红又来了,这段代码在小红的浏览器直接执行,小明就顺利的拿到了小红的cookie,登上了小红的账号开始辱骂这个博主...
这就叫做XSS(Cross-Site Scripting),那么它是如何形成的?
- 首先是后台的模版问题:
<p>
评论内容:<?php echo $content; ?>
</p>
此时$content
的内容并没有经过过滤就输出了,怎么解决呢?我们将<
符号变成 <
(HTML实体)就行。
- 前端代码问题:
$p.html(content)
或者
$p = $('<p>'+ content +'</p>')
此时content 内容又被原样输出了。解决办法就是不要自己拼 HTML,尽量使用 text 方法。如果一定要使用 HTML,就把可疑符号变成 HTML 实体。