【问题标题】:How do I fix Open Redirect Security Vulnerability in JavaScript?如何修复 JavaScript 中的开放重定向安全漏洞?
【发布时间】:2016-04-12 14:20:07
【问题描述】:

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);
  }
}

我该如何解决?

【问题讨论】:

    标签: javascript security redirect fortify


    【解决方案1】:

    在检测问题时,HP Fortify 会根据许多规则执行静态代码分析。在“打开重定向”问题的情况下,它检测到您正在重定向到由传递给 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

    【讨论】:

    • 谢谢!这很好解释。
    • 如果查询字符串值是动态的,即文本框值,如何解决? window.open('redirect.php?destination='+paramvalue);
    • 谢谢!这真的很有帮助。
    猜你喜欢
    • 1970-01-01
    • 2016-08-27
    • 2020-08-16
    • 2012-06-14
    • 2022-10-04
    • 1970-01-01
    • 2021-12-28
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多