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

时间:2009-01-20 16:41:39

标签: javascript dom

我正在进行同行评审,我发现人们使用window.location.search检查已发送到给定(搜索)页面的paremetes。

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

4 个答案:

答案 0 :(得分:12)

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

就像一些无用的进一步信息:据我所知,该属性在Netscape Navigator 2 / MS Internet Explorer 3中引入,所以我说它使用起来非常安全,即使它不是任何一部分标准(尚)。

答案 1 :(得分:1)

安全,如'安全'或'这将始终如一'?

即使window.location很广泛,它仍然不是W3C标准的一部分。然而,它被添加到2006年的工作草案规范中:基本上意味着浏览器可能支持也可能不支持。因此,从'这项工作将永远',你将占用一小部分机会。

答案 2 :(得分:1)

有一点需要注意这种方法。 window.location在页面加载时静态设置,并且不会检测用户在此之后对地址栏所做的更改。这不应该是一个问题,但重要的是要知道。

将以下代码保存为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>

“click me”锚点将显示当前窗口位置onclick。但是,如果您向地址栏添加任何内容并再次单击该链接,它将报告第一次执行的操作。

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

答案 3 :(得分:0)

  

这样做是否安全?

是。假设每个参数不需要多个值,将参数作为name-&gt;值映射获取的示例代码:

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