Javascript 使用window.location查询页面的GET参数是否安全?

Javascript 使用window.location查询页面的GET参数是否安全?,javascript,dom,Javascript,Dom,我正在进行同行评议,发现有人使用window.location.search检查哪些参数已发送到给定(搜索)页面 这样做安全吗?我在想,我们可能可以在脚本块内打印HTML输出中的参数,并验证打印的变量,而不是查询window.location。如果启用了javascript,window.location.search可以安全使用 正如一些无用的进一步信息:据我所知,该属性是在Netscape Navigator 2/MS Internet Explorer 3中引入的,因此我认为它使用起来非常

我正在进行同行评议,发现有人使用window.location.search检查哪些参数已发送到给定(搜索)页面


这样做安全吗?我在想,我们可能可以在脚本块内打印HTML输出中的参数,并验证打印的变量,而不是查询window.location。

如果启用了javascript,
window.location.search
可以安全使用


正如一些无用的进一步信息:据我所知,该属性是在Netscape Navigator 2/MS Internet Explorer 3中引入的,因此我认为它使用起来非常安全,即使它不是任何标准的一部分(目前)。

安全性与“安全性”或“这会一直有效吗”


尽管window.location被广泛使用,但它仍然不是W3C标准的一部分。然而,它在2006年被添加到工作草案规范中:基本上意味着浏览器可能支持它,也可能不支持它。因此,从“这种方法是否总是有效”的角度来看,我想你将抓住一个小小的机会。

关于这种方法,需要注意一点<代码>窗口。位置在页面加载时静态设置,不会检测到用户在此之后对地址栏所做的更改。这不应该是一个问题,但重要的是要知道

将以下代码另存为html文件并在浏览器中启动:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <title>test</title>
    </head>
    <body>
        <a href="javascript:void(0);" 
                onclick="alert(window.location);">click me</a>
    </body>
</html>

测试
“单击我”定位将显示当前窗口位置
onclick
。但是,如果您向地址栏添加任何内容并再次单击链接,它将报告与第一次相同的内容

希望这不是一个问题,我无法想象它会以任何方式影响你,但很高兴知道

这样做安全吗

对。假设每个参数不需要多个值,则以名称->值映射形式获取参数的示例代码:

function getParameters() {
    var parameters= new Object();
    var parts= window.location.search.substring(1).split('\x26');
    for (var parti= parts.length; parti-->0;) {
        var subparts= parts[parti].split(';'); // support semicolon separators as well as ampersand (see HTML 4.01 section B.2.2)
        for (var subparti= subparts.length; subparti-->0;) {
            var parparts= subparts[subparti].split('=', 2);
            if (parparts.length==2)
                parameters[decodeURIComponent(parparts[0])]= decodeURIComponent(parparts[1]);
        }
   }
   return parameters;
}

它是ECMAScript最新工作草案的一部分。您应该非常安全地使用它:window.location.search在2017年仍然可以安全使用吗?:-)