Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Don';不能在html标记内执行javascript_Javascript_Html_Security - Fatal编程技术网

Don';不能在html标记内执行javascript

Don';不能在html标记内执行javascript,javascript,html,security,Javascript,Html,Security,我一直在阅读有关xss的文章,并提出了一些问题,但最重要的是,我想知道是否有一种方法可以避免在前端使用xss 假设我的后端逻辑工作不正常,我输入了一个值为的字段: "name": "<script> alert('hello') </script>" “name”:“警报('hello')” 如果我们使用html标记来显示信息,它将执行javascript。 我搜索了它,找到了标签,但它被标记为“过时”,但我没有找到任何其他不过时的方法来不执行javascript

我一直在阅读有关xss的文章,并提出了一些问题,但最重要的是,我想知道是否有一种方法可以避免在前端使用xss

假设我的后端逻辑工作不正常,我输入了一个值为的字段:

 "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