1. 什么是XSS攻击 ?
「简述」:XSS
全称Cross-Site Scripting
也叫跨站脚本攻击,是最最最常见的网络安全漏洞,其实就是攻击者在受害者的浏览器中注入恶意脚本执行。这种攻击通常发生在 Web
应用程序未能正确过滤用户输入
的情况下,导致恶意脚本被嵌入到合法的网页
中。执行后会产生窃取
信息、篡改
网页、和传播病毒与木马
等危害,后果相当严重。
2.XSS
分类
2.1 存储型 XSS即Stored XSS
恶意的脚本被放置在目标服务器上面,通过正常的网页请求返回给用户端执行。
「例如」 在观看某个私人博客评论中插入恶意脚本
,当其他用户访问该页面时,脚本会执行危险操作。
2.2 反射型 XSS即Reflected XSS
恶意的脚本通过 URL
参数或一些输入的字段传递给目标的服务器,用户在正常请求时会返回并且执行。
「例如」 通过链接中的参数后面注入脚本
,当用户点击此链接时,脚本就会在用户的浏览器中执行危险操作。
2.3 DOM 基于的 XSS即DOM-based XSS
恶意的脚本利用 DOM(Document Object Model)
操作来修改页面内容。这种类型的 XSS
攻击不涉及服务器端的代码操作,仅仅是通过客户端插入 JavaScript
代码实现操作。
富文本就是属于第一种,把脚本藏在代码中存到数据库
,然后用户获取时会执行。
3. 富文本防XSS的方式?
网上一大堆不明不白的方法还有各种插件可以用,但其实自己转义
一下就行,根本不需要复杂化。
当我们不做处理时传给后台的富文本数据是这样的。
<span style=\"font-size: l4pt;\">富文本测试</span>
上面带有标签,甚至有src
和script
之类的操作,在里面放一些脚本真的太简单了。
因此,我们创建富文本成功提交给后台的时候把各种<>/
之类危险符号转义成指定的字符就能防止脚本了。
如下所示,方法参数value
就是要传递给后台的富文本内容。
此时传给后台的富文本参数是这样的,把敏感符号全部转义。
'<p><span style="font-size: 14pt;">....
但展现给用户看肯定要看正常的内容啊,这里就要把内容重新还原了,这步操作可以在前端完成,也可以在后端完成。
4. 存在不足
上面只适合使用于纯富文本
的场景,如果在普通文本的地方回显会依然触发危险脚本
。如下所示
其实直接转义后不还原即可解决,但由于是富文本这种情况比较特殊情况,不还原就失去文本样式了,怎么办??
最终解决方案是对部分可能造成XSS
攻击的特殊字符和标签进行转义处理,例如:script、iframe
等。
以下文章来源于稀土掘金技术社区 ,作者天天鸭