如何修复JavaScript中的“打开重定向安全性”漏洞?

Shr*_* HM 1 javascript security redirect fortify

Fortify Scan报告了一个“ Open Redirect”安全漏洞

window.open(strUrl,"_blank", features)
Run Code Online (Sandbox Code Playgroud)

我的代码:

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);
  }
}
Run Code Online (Sandbox Code Playgroud)

我如何解决它?

Dav*_*ell 5

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

与其ADMIN_TOOL_SNOOP在客户端上定义并使用它在JavaScript中构建URL,不如在服务器端使用重定向页定义一组预定的目标,然后让您的JavaScript将目标页作为参数传递。

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

window.open('redirect.php?destination=ADMIN_TOOL&template=...')
Run Code Online (Sandbox Code Playgroud)

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

DESTINATION_CODE | ACTUAL_URL
--------------------------------------
ADMIN_TOOL       | my_actual_page.php
ANOTHER_CODE     | another_page.php
Run Code Online (Sandbox Code Playgroud)

服务器收到重定向请求后,应查找匹配的代码并将页面重定向到实际URL。在代码不匹配的情况下,应该发生错误或没有重定向。

总而言之,您将创建一个允许的URL白名单,该白名单是在服务器端而不是客户端上控制的,这意味着它不接受客户端操作。

该扫描结果的HP参考