Don';不能在html标记内执行javascript
我一直在阅读有关xss的文章,并提出了一些问题,但最重要的是,我想知道是否有一种方法可以避免在前端使用xss 假设我的后端逻辑工作不正常,我输入了一个值为的字段:Don';不能在html标记内执行javascript,javascript,html,security,Javascript,Html,Security,我一直在阅读有关xss的文章,并提出了一些问题,但最重要的是,我想知道是否有一种方法可以避免在前端使用xss 假设我的后端逻辑工作不正常,我输入了一个值为的字段: "name": "<script> alert('hello') </script>" “name”:“警报('hello')” 如果我们使用html标记来显示信息,它将执行javascript。 我搜索了它,找到了标签,但它被标记为“过时”,但我没有找到任何其他不过时的方法来不执行javascript
"name": "<script> alert('hello') </script>"
“name”:“警报('hello')”
如果我们使用html标记
来显示信息,它将执行javascript。
我搜索了它,找到了标签
,但它被标记为“过时”,但我没有找到任何其他不过时的方法来不执行javascript。那么,即使我们以某种方式允许将脚本注入数据库,是否有任何方法可以保护前端的最终用户不执行恶意脚本?尽管保护数据库不受不安全输入的影响肯定会更好,一个选项是简单地分配给元素的textContent
,而不是它的innerHTML
,以确保数据库中的字符串被解析为文本,而不是HTML标记:
const databaseText=“测试输入1测试输入2警报(“邪恶脚本”)测试输入3”;
const p=document.body.appendChild(document.createElement('p');
p、 textContent=数据库文本代码>对于这种注入,您必须检查发送到服务器@服务器的所有输入。我喜欢作为一种逃避HTML标记的解决方案(这实际上是一种防止脚本运行的解决方案)。请注意,这不会保护XSS。反例:
,或
,等等。如果需要html输入,则需要进行适当的清理。Google Caja或某种消毒剂可能是合适的,可能还需要一个内容安全策略
标题。好的,这样我们可以预处理信息,但是如果我们想在文本中添加标签(例如加粗某些部分),但我们想让“脚本”标签等显示为普通文本呢?@GaborLengyel谢谢!我忘记了内联处理程序。@Kroxitrock如果您必须将可能不安全的HTML字符串解析为HTML而不是文本,那么最好使用经过测试的工具来完成这项工作。有许多库(声称)实现了这一点:如果您想首先使用DOMParser
路径,您可以在通过消毒剂运行之前,用类似some text
的标记替换some text
。