XSS(Cross Site Scripting),跨站脚本攻击,简单来说就是用户获取到了页面脚本执行的权限,够获取到JS脚本执行权限后能干的事情很多,比如盗取session id,从而实现登录帐号从而获取账户相关信息。
XSS攻击一般都是出现在有富文本提交的表单中,用户可以在提交的富文本中按以下各种方法插入JavaScript脚本:
<script>alert("hacked!");</script>
<img src="./" onerror="alert('hacked!');">
<a href="javascript:alert('hacked!')">foo</a>
<style> div{ background: url("javascript:alert('hacked!');"); } </style>
以及其他的各种方法在页面执行Js脚本,当然黑客执行脚本的目的并不是为了弹窗装逼,而是读取当前用户的cookies,从而获取session id,达到非法登录用户账户的目的,简单来说就是不要密码盗号。
嵌入式web页面富文本编辑器很多,例如ueditor等,有人以为防范XSS攻击是这些编辑器的事情,事实上XSS攻击并不是这些编辑器能够阻止得了的,因为黑客是可以绕过编辑器提交表单的,所以防范XSS攻击的重点是后台字符串过滤,将非法的串过滤掉,当然还有另外一种办法,那就是使用第三方替代标签,如UBB标签(discuz中使用的就是这个)、Markdown等,不直接使用HTML系列的标签由其他标签转换为HTML,从而达到防止非法注入脚本的目的。
事实上富文本提交攻击防范远不止XSS这些,XSS主要是指Js脚本的攻击,可是有一种不致命却很糟糕的攻击却是被忽略了,那就是css脚本扰乱界面布局,事实上这应该算是纯粹的捣乱,可是却也能够严重的影响到页面的美观以及用户的正常使用,开源中国就曾经被大家用这种方法玩坏过。
<div style="display:block;position:fixed;width:100%;height:100%;background-color:red;"></div>
上面的代码便可以让整个网页变成红色。
因此,我个人认为html富文本的过滤不仅仅是简单的Js过滤,应当连css一起过滤掉。或者干脆使用第三方标签UBB等。