为什么这个蒙面JS代码在GET参数中:'*alert(13)*'在我的页面上执行?

Emm*_*myS 9 javascript security xss

我们对我们的网站进行了WhiteHat扫描,他们返回的其中一个漏洞就是我们的网址whscheck'*alert(13)*'a/.当我们运行完整的URL(https://oursite.com/phorders3/index.php/whscheck'*alert(13)*'a/)时,网站会加载并发出一个值为13 pops的警报.谁能解释一下这是如何工作的?星号到底是a/做什么的?

Guf*_*ffa 6

页面中的代码使用Javascript中字符串文字中URL的值,而不是正确地转义值.这意味着任何人都可以将Javascript放在URL中,它将在页面中执行.

例如,这可以通过使用这样的URL链接到您的站点来用于跨站点脚本,当有人使用该链接时,脚本将在其浏览器中运行,获取该用户专用的一些信息并将其发送到某个地方.

撇号和星号用于打破字符串文字.如果你在页面的Javascript中有这样的代码:

var s = '<? echo $variable ?>';
Run Code Online (Sandbox Code Playgroud)

如果变量包含来自URL的值,它将在呈现的页面中以这样的方式结束:

var s = 'whscheck'*alert(13)*'a';
Run Code Online (Sandbox Code Playgroud)

撇号使字符串文字结束,并使下面的表达式成为Javascript代码的一部分,而不是字符串中的内容.

星号只是表达式之间的运算符.放入URL比+运营商更容易,否则将是自然选择.