如何从QueryString变量中删除可执行JavaScript?

时间:2014-01-17 19:19:14

标签: javascript query-string

我的页面网址如下:https://site.com/page.aspx?QSVariableName=Value

我们的安全团队已经提出了一个漏洞,声明如果Value部分注入可执行JS,则类似于:

https://site.com/page.aspx?QSVariableName=Value%27%2balert%281234567890%29%2b%27(相当于传递值'+警报(1234567890)+'

然后 1234567890 从我在使用Value的页面上的超链接的OnClick事件中收到警报。

就像我说的,这不是我故意做的事情,但在代码中被识别为漏洞。所以问题是,我如何确保QSVariableName仅使用Value并忽略不必要的代码(现在只保留给JS)?

我想到的复杂性是QSVariableName可能包含任何JS代码,而不仅仅是alert()。它可以出现在任何地方,而不仅仅是最后。有没有办法识别嵌入在字符串中的JS可执行代码?

如果Value是一个错误的'字符串',只要它不包含任何可执行文件就可以了。

1 个答案:

答案 0 :(得分:0)

如果您使用QSVariableName模式选择基于onclick的函数,而不是将switch/case直接放入QSVariableName属性,该怎么办?您还可以使用关联数组将适当的查询字符串映射到适当的函数。无论哪种方式,您只需将QSVariableName视为字符串,并且只在onclick事件中使用安全且预先批准的JS。缺点是,任何试图将JS注入查询字符串的人都会收到错误,但是他们试图破解你的网站...他们的用户体验会受到相应的影响。

如果没有看到更多的代码,我不确定我能否找到更好的答案...