如何修复JavaScript中的Open Redirect Security漏洞?

时间:2016-04-12 14:20:08

标签: javascript security redirect fortify

Fortify Scan报告“开放重定向”'

中的安全漏洞
window.open(strUrl,"_blank", features)

我的代码:

var features = "status=no, toolbar=no, menubar=no, location=no, top=20, left=175, height=500, width=750";

var strURL = ADMIN_TOOL_SNOOP + "?machineName=" + strMachine + "&template=snoop" +"&context=DEBUG&date=" + strDate.replace(regExp, "");

var validateStrURL =  new RegExp("/^[.\\p{Alnum}\\p{Space}]{0,1024}+/", "g");
if(validateStrURL.test(strURL))
{
  if((strURL != null)&&(strURL.length !=0)&&(strURL.length <= 200) )
  {
    window.open(strURL,"_blank",features);
  }
}

我该如何解决?

1 个答案:

答案 0 :(得分:4)

检测到问题时,HP Fortify会根据许多规则执行静态代码分析。对于&#34;打开重定向&#34;问题是,它检测到您正在重定向到由传递给JavaScript或在JavaScript中创建的数据组成的URL。通常认为这可以通过网络钓鱼和其他攻击进行操纵。

不是在客户端定义ADMIN_TOOL_SNOOP并使用它在JavaScript中构建URL,而是尝试使用重定向页面在服务器端定义一组预定目标,然后让你的JavaScript将目标页面作为参数传递。

例如,在您的客户端代码中有

window.open('redirect.php?destination=ADMIN_TOOL&template=...')

然后,在您的服务器端代码中,您将拥有一个类似于

的表
DESTINATION_CODE | ACTUAL_URL
--------------------------------------
ADMIN_TOOL       | my_actual_page.php
ANOTHER_CODE     | another_page.php

当服务器收到重定向请求时,它应该查找匹配的代码并将页面重定向到实际的URL。如果是不匹配的代码,则应该发生错误或不进行重定向。

总之,您正在创建一个允许在服务器端而不是客户端控制的允许URL的白名单,这意味着它不会对客户端操作开放。

HP reference for that scan result