Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么在GET参数&x27*警报(13)*';在我的页面上执行?_Javascript_Security_Xss - Fatal编程技术网

Javascript 为什么在GET参数&x27*警报(13)*';在我的页面上执行?

Javascript 为什么在GET参数&x27*警报(13)*';在我的页面上执行?,javascript,security,xss,Javascript,Security,Xss,我们对我们的网站进行了WhiteHat扫描,他们返回的漏洞之一是我们的URL附加了whscheck'*alert(13)*'a/。当我们运行完整的URL(https://oursite.com/phorders3/index.php/whscheck'*alert(13)*'a/),站点加载和值为13 POP的警报。有人能解释一下这是怎么回事吗?星号和a/到底在做什么?页面中的代码在Javascript中以字符串文字形式使用URL中的值,而没有正确转义该值。这意味着任何人都可以将Javascri

我们对我们的网站进行了WhiteHat扫描,他们返回的漏洞之一是我们的URL附加了
whscheck'*alert(13)*'a/
。当我们运行完整的URL(
https://oursite.com/phorders3/index.php/whscheck'*alert(13)*'a/
),站点加载和值为13 POP的警报。有人能解释一下这是怎么回事吗?星号和
a/
到底在做什么?

页面中的代码在Javascript中以字符串文字形式使用URL中的值,而没有正确转义该值。这意味着任何人都可以将Javascript放在URL中,它将在页面中执行

例如,通过使用这样的URL链接到您的站点,可以将其用于跨站点脚本编写,当有人使用该链接时,脚本将在其浏览器中运行,提取一些对该用户私有的信息并将其发送到某处

撇号和星号用于分隔字符串文字。如果页面中的Javascript中有类似的代码:

var s = '<? echo $variable ?>';
撇号使字符串以文字结尾,并使下面的表达式成为Javascript代码的一部分,而不是字符串中的内容


星号只是表达式之间的运算符。与自然选择的
+
运算符相比,输入URL更容易。

很可能此注入是在脚本标记()之间的某个位置进行的,URL反映在脚本中的某种函数或变量中。下面是注射的细目以及它如何/为什么工作

'从变量定义中的字符串文字中断开
*使javascript首先关注代码的这一部分,这通常是绕过不允许的过滤器的一种方式
alert(13)是一种概念证明,它使内部有13的alert框显示javascript的执行情况
*再次,更可能绕过过滤器或WAF阻塞
'重新打开字符串文字以使javascript语法正确
a只是进入字符串的一些任意输入
/就是在一个RESTful URL结构中关闭URL本身的路径


Sentinel界面中有一个选项可供您直接向Whitehat工程师询问此类问题,这是一个非常有用的资源。

php脚本对
whscheck'*alert(13)*'a
的整个值做了什么?不知何故,PHP脚本正在处理这个字符串,而警报(13)部分则以标记、跨站点脚本的形式出现在网页上。您将页面中的URL的某些部分包含在JavaScript字符串常量中,并且无法确保对嵌入的引号进行转义。为了澄清@Pointy的观点,假设您有
var foo=''然后使用精心编制的页面名称,您可以生成一个语句,如
var foo='whscheck'*alert(13)*'a'。这会在页面上运行Javascript代码,因为您不会转义页面的名称。此外,如果您不发布实际涉及的代码,任何人都不可能确切地告诉您问题所在。也许值得注意的是,将字符串和未定义的
相乘在技术上是有效的,尽管返回
NaN
'test'*undefined=>NaN
)简而言之,
'
未正确转义,导致代码注入漏洞。
var s = 'whscheck'*alert(13)*'a';