美文网首页
高亮 搜索关键词 xss 攻击

高亮 搜索关键词 xss 攻击

作者: 在幽幽暗暗反反复复中追问 | 来源:发表于2020-04-19 18:20 被阅读0次

有个需求是在搜索结果中高亮搜索关键词
很多的文章的解决办法都是直接替换元素的 innerHTML
el.innerHTML = el.innerHTML.split(value).join('<span style="color: red">' + value + '</span> ')
效果是没有问题的,但是感觉很容易被 xss 攻击
这个方法在 Vue 里面是没有测试出有什么问题,因为 Vue 模板有对 xss 攻击做处理

一般服务端和客户端都要预防 xss 攻击,假设使用的框架没有对 xss 攻击做防范,或者不使用框架,有什么办法?

处理思路基本是将特殊字符如 < > / 转换成 HTML 实体

https://www.cnblogs.com/lovesong/p/5211667.html

另外也不建议在这种情况下使用 innerHTML

HTML 5 中指定不执行由 innerHTML 插入的 <script> 标签。
然而,有很多不依赖 <script> 标签去执行 JavaScript 的方式。所以当你使用innerHTML 去设置你无法控制的字符串时,这仍然是一个安全问题。

如果要向一个元素中插入一段 HTML,而不是替换它的内容,那么请使用 insertAdjacentHTML() 方法。

复习一下
innerHTML 设置或获取HTML语法表示的元素的后代
innerText 设置或获取一个节点及其后代的“渲染”文本内容,会触发回流
textContent 设置或表示一个节点及其后代的文本内容,它不会把给定的内容解析为 HTML,它仅仅是将原始文本插入给定的位置

Note: 如果一个 <div>, <span>, 或 <noembed> 节点有一个文本子节点,该节点包含字符 (&), (<),(>), innerHTML 将这些字符分别返回为&, < 和 > 。使用Node.textContent 可获取一个这些文本节点内容的正确副本。

相关文章

网友评论

      本文标题:高亮 搜索关键词 xss 攻击

      本文链接:https://www.haomeiwen.com/subject/fnebvhtx.html