我的Javascript代码旨在获取一些不受信任的字符串变量并在DOM中呈现它。它将插入格式良好的HTML中的已知点。当且仅当字符串不可能包含HTML元素时才会插入它。脚本执行是主要的担心,但任何类型的注入都可以被用于利用中。
如果字符串似乎不安全,我根本无法在DOM中呈现它。没有要求对发现可能不安全的字符串进行消毒或做任何事情。事实上,我想避免使用库,而不喜欢无需维护的简单检查。我也看到了向DOM添加文本节点的解决方案,但我只是说我不会为我正在做的事情工作。
我认为测试可能和&#34一样简单;字符串是否包含<":
function isItSafe(text) { return text.indexOf('<') === -1; }
但也许这很天真。特别是,当某些漏洞依赖于某个浏览器响应无效HTML时的行为方式。是否可以在不使用&#34;&lt;&#34;?的情况下创建注入漏洞利用?如果是这样,您认为最低限度检查需要做什么?
答案 0 :(得分:2)
简短的回答是:始终在用户的输入上使用正则表达式。 我不认为有一种方法可以在没有尖括号的情况下进行XSS攻击。
有些库可能会使用更复杂的正则表达式,但这是一个很好的开头:
这将为String的原型添加一个方法:
String.prototype.applyXSSprotection = function(){
return this.replace(/</g, "<").replace(/>/g, ">");
};
无论何时将用户的输入集成到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*/