2017-07-19 28 views
0

我的Javascript代码旨在获取一些不受信任的字符串变量并将其呈现在DOM中。它将插入格式良好的HTML中的已知点。如果且仅当字符串不可能包含HTML元素时才会插入。脚本执行是主要的担心,但任何可能被用于攻击的注入都是令人担忧的。什么是最简单的检查可能的HTML/JS注入攻击?

如果字符串看起来不安全,我可以简单地不在DOM中呈现它。没有要求对发现可能不安全的字符串进行消毒或做任何事情。事实上,我想避免图书馆,并喜欢一个无需维护的简单检查。我也看到了向DOM添加文本节点的解决方案,但我只是说这对我所做的事不起作用。

我想测试也许是因为“确实字符串包含<”那样简单:

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

但也许这是幼稚的。尤其是,当某些漏洞利用依赖于某个浏览器响应无效HTML的行为时。可以在不使用“<”的情况下创建注入漏洞?如果是这样,你认为最低限额的支票需要做些什么?

+1

使用正则表达式!我认为这个答案https://stackoverflow.com/a/20855840/6826071是你需要的。 – DrunkDevKek

+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*/