如何修复 JavaScript 中的开放重定向安全漏洞?
How do I fix Open Redirect Security Vulnerability in JavaScript?
Fortify Scan 报告
中存在 'Open Redirect' 安全漏洞
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);
}
}
我该如何解决?
检测问题时,HP Fortify 正在根据许多规则执行静态代码分析。在 "Open Redirect" 问题的情况下,它检测到您正在重定向到 URL,该 URL 由传递给您的 JavaScript 或在您的 JavaScript 中创建的数据组成。这通常被认为容易受到网络钓鱼和其他攻击的操纵。
与其在客户端定义 ADMIN_TOOL_SNOOP
并使用它在 JavaScript 中构建 URL,不如尝试在服务器端定义一组预先确定的目的地 -使用重定向页面,然后让您的 JavaScript 将目标页面作为参数传递。
例如,在您的客户端代码中有
window.open('redirect.php?destination=ADMIN_TOOL&template=...')
然后,在您的服务器端代码中,您将有一个类似于
的 table
DESTINATION_CODE | ACTUAL_URL
--------------------------------------
ADMIN_TOOL | my_actual_page.php
ANOTHER_CODE | another_page.php
当服务器收到重定向请求时,它应该查找匹配的代码并将页面重定向到实际的 URL。在代码不匹配的情况下,应该会发生错误或不会发生重定向。
总而言之,您正在创建一个允许 URL 的白名单,它在服务器端而不是客户端进行控制,这意味着它不对客户端操作开放。
Fortify Scan 报告
中存在 'Open Redirect' 安全漏洞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);
}
}
我该如何解决?
检测问题时,HP Fortify 正在根据许多规则执行静态代码分析。在 "Open Redirect" 问题的情况下,它检测到您正在重定向到 URL,该 URL 由传递给您的 JavaScript 或在您的 JavaScript 中创建的数据组成。这通常被认为容易受到网络钓鱼和其他攻击的操纵。
与其在客户端定义 ADMIN_TOOL_SNOOP
并使用它在 JavaScript 中构建 URL,不如尝试在服务器端定义一组预先确定的目的地 -使用重定向页面,然后让您的 JavaScript 将目标页面作为参数传递。
例如,在您的客户端代码中有
window.open('redirect.php?destination=ADMIN_TOOL&template=...')
然后,在您的服务器端代码中,您将有一个类似于
的 tableDESTINATION_CODE | ACTUAL_URL
--------------------------------------
ADMIN_TOOL | my_actual_page.php
ANOTHER_CODE | another_page.php
当服务器收到重定向请求时,它应该查找匹配的代码并将页面重定向到实际的 URL。在代码不匹配的情况下,应该会发生错误或不会发生重定向。
总而言之,您正在创建一个允许 URL 的白名单,它在服务器端而不是客户端进行控制,这意味着它不对客户端操作开放。