不要在html标记内执行javascript

时间:2018-08-13 07:59:13

标签: javascript html security

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

假设我的后端逻辑无法正常工作,并且我输入的字段值为:

 "name": "<script> alert('hello') </script>" 

如果我们使用html标签<p>来显示信息,它将执行javascript。 我已经搜索了它并找到了标签<xmp>,但是它被标记为“过时”,但是我没有找到不执行JavaScript的其他任何过时的方法。那么,即使我们以某种方式允许将脚本注入数据库,有什么方法可以保护前端的最终用户免受恶意脚本的攻击?

1 个答案:

答案 0 :(得分:0)

尽管从不安全的输入中保护数据库肯定会更好,但是一种选择是简单地分配给元素的textContent而不是元素innerHTML,以确保解析数据库中的字符串作为文本,而不是HTML标记

const databaseText = "test input 1<span>test input 2</span><script> alert('EVIL SCRIPT')</scr" + "ipt><span>test input 3</span>";
const p = document.body.appendChild(document.createElement('p'));
p.textContent = databaseText;

如果期望该字符串除了可能包含不安全的script标签之外还包含HTML标记,则可能会认为您可以使用DOMParser之类的东西来去除所有script标签,然后再将HTML标记插入实际的文档,但是由于可能存在<.. onclick="...">之类的内联处理程序,因此还不足以提供保护。感谢@GaborLengyel指出了这一点。