我一直在阅读有关xss的文章,并且提出了一些问题,但是最重要的是,我最想知道的是在前端是否可以避免这种情况?
假设我的后端逻辑无法正常工作,并且我输入的字段值为:
"name": "<script> alert('hello') </script>"
如果我们使用html标签<p>
来显示信息,它将执行javascript。
我已经搜索了它并找到了标签<xmp>
,但是它被标记为“过时”,但是我没有找到不执行JavaScript的其他任何过时的方法。那么,即使我们以某种方式允许将脚本注入数据库,有什么方法可以保护前端的最终用户免受恶意脚本的攻击?
答案 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指出了这一点。