什么是HTML / JS注入攻击可能的最简单检查?

时间:2017-07-19 23:56:16

标签: javascript html security xss

我的Javascript代码旨在获取一些不受信任的字符串变量并在DOM中呈现它。它将插入格式良好的HTML中的已知点。当且仅当字符串不可能包含HTML元素时才会插入它。脚本执行是主要的担心,但任何类型的注入都可以被用于利用中。

如果字符串似乎不安全,我根本无法在DOM中呈现它。没有要求对发现可能不安全的字符串进行消毒或做任何事情。事实上,我想避免使用库,而不喜欢无需维护的简单检查。我也看到了向DOM添加文本节点的解决方案,但我只是说我不会为我正在做的事情工作。

我认为测试可能和&#34一样简单;字符串是否包含<":

function isItSafe(text) { return text.indexOf('<') === -1; }

但也许这很天真。特别是,当某些漏洞依赖于某个浏览器响应无效HTML时的行为方式。是否可以在不使用&#34;&lt;&#34;?的情况下创建注入漏洞利用?如果是这样,您认为最低限度检查需要做什么?

1 个答案:

答案 0 :(得分:2)

简短的回答是:始终在用户的输入上使用正则表达式。 我不认为有一种方法可以在没有尖括号的情况下进行XSS攻击。

有些库可能会使用更复杂的正则表达式,但这是一个很好的开头:

这将为String的原型添加一个方法:

String.prototype.applyXSSprotection = function(){
  return this.replace(/</g, "&lt;").replace(/>/g, "&gt;");
};

无论何时将用户的输入集成到DOM中,都应该使用:

/*let's suppose the user input is stored in the variable user_input as a string*/
user_input = user_input.applyXSSprotection();
/*now use it*/