Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 不经验证直接使用window.location.href安全吗_Javascript_Security_Xss_Href_Window.location - Fatal编程技术网

Javascript 不经验证直接使用window.location.href安全吗

Javascript 不经验证直接使用window.location.href安全吗,javascript,security,xss,href,window.location,Javascript,Security,Xss,Href,Window.location,在没有任何验证的情况下使用window.location.href安全吗 例如: <script> var value = window.location.href; alert(value); </script> var值=window.location.href; 警报(值); 从上面的示例来看,它是否容易受到跨站点脚本(XSS)攻击? 如果是,那怎么办?攻击者如何将window.location.href的值修改为恶意内容 编辑(第二种情况)

在没有任何验证的情况下使用window.location.href安全吗

例如:

<script>
    var value = window.location.href;
    alert(value);
</script>

var值=window.location.href;
警报(值);
从上面的示例来看,它是否容易受到跨站点脚本(XSS)攻击? 如果是,那怎么办?攻击者如何将window.location.href的值修改为恶意内容

编辑(第二种情况)

这是url:www.example.com?url=www.attack.com

假设我有一个getQueryString()函数,它将返回值而不进行验证

<script> 
    var value = getQueryString('url'); 
    window.location.href = value; 
</script>

var值=getQueryString('url');
window.location.href=值;
同样的问题,它是否容易受到跨站点脚本(XSS)攻击?
如果是,那怎么办?攻击者如何利用“window.location.href=value”执行XSS?

在#1下不可能执行XSS

我能想到的最糟糕的情况是有人将其用于社会工程(比如说你的域名像Ebay或Amazon一样非常受欢迎),攻击者可以做的就是制作一条消息,上面写着“Amazon/Ebay免费为你准备的东西,只需转到”并使用URL将其发送给某人

但我仍然不觉得这有什么危险,因为URL编码的消息看起来很混乱

编辑:
这是唯一的答案#1,因为当我回答这个问题时,没有使用
location.href
的“#2”

,可以理解为包括两件事:

  • 使用
    location.href
    的值,在代码中传递它,操纵它并使用它来指导代码中的逻辑
  • 将某些内容分配给
    location.href
    ,使浏览器导航到不同的URL
  • 第一个,使用该值,可以认为是安全的。
    location.href
    的值只不过是一个字符串。当然,它是用户输入的一部分,所以您不希望将其传递给
    eval
    语句,但对于所有其他形式的用户输入也是如此。事实上,
    location.href
    的值始终是一个有效的URL,因此可以对其内容进行某些假设。从这个意义上讲,你可以说它比大多数形式的用户输入更安全。只要你没有做出任何错误的假设

    第二个是你应该小心的。将未验证的值分配给它可能会导致打开重定向,这些重定向可用于网络钓鱼,而且,由于使用
    javascript:
    vbscript:
    uri,会出现XSS问题


    编辑:根据要求,这里更深入地解释了协助
    定位的问题。href

    假设您有一个攻击者控制的变量
    foo
    。它的来源可以是任何东西,但查询字符串参数就是一个很好的例子。当您将
    foo
    的值分配给
    location.href
    时,会发生什么情况?那么,浏览器会尽力将该值解释为URI,然后将用户重定向到结果地址。在大多数情况下,这将触发页面加载;e、 g.如果
    ”https://www.google.com/“
    ,谷歌的首页将被加载。允许这种情况在没有用户交互的情况下发生被称为安全漏洞,并被视为安全漏洞

    但是,有一些类型的URI不会触发页面加载。这种URI的一个常见示例是只包含片段标识符的URI,例如
    #qux
    。将其分配给
    location.href
    将导致页面滚动到ID为“quux”的元素,而不执行其他操作。只要您对片段本身的值不做任何愚蠢的事情,片段URI是安全的

    然后是有趣的部分:
    javascript:
    vbscript:
    uri。这些会咬你的。JavaScript和VBScript URI方案是非标准URI方案,可用于在当前打开的网页上下文中执行代码。听起来很糟糕,不是吗?嗯,应该是这样。考虑攻击者控制的变量<代码> Foo:攻击者必须做的是发动对用户的攻击,将脚本URI注入变量。将其分配给
    location.href
    时,基本上与在脚本上调用
    eval
    相同

    JavaScript URI适用于所有现代浏览器,而VBScript仅适用于IE,并且要求页面以怪癖模式呈现

    最后,还有一个更有趣的URI方案需要考虑:数据URI。数据URI是文件文本:整个文件编码为URI。它们可以用于编码任何文件,包括HTML文档。这些文档和其他文档一样,可以包含脚本

    大多数浏览器将每个数据URI视为自己的唯一URI。这意味着数据URI中包装的HTML文档中的脚本无法访问其他页面上的任何数据。除了Firefox

    Firefox对待数据URI的方式与其他浏览器略有不同。在其中,数据URI继承打开它的任何文档的来源。这意味着任何脚本都可以访问引用文档中包含的数据。这是给你的XSS

    var value = getQueryString('url'); 
    
    window.location.href = encodeURI(value); 
    

    我认为这是最简单的方法

    窗口。location.href
    是一个字符串。字符串是无害的,除非您使用它们做了一些可能有害的事情(
    innerHTML
    可能,…或
    eval
    ),攻击者是否能够修改window.location.href的值?因为如果他们能够这样做,我认为这是危险的。例如,如果他们可以更改window.location.href的内容,他们可能会将其更改为“)alert(“Inject successful!”)/”,您认为这将实现什么?我不知道,我只是想知道他们是否能够更改window.location.href的值。那么你就会有问题,因为有人可能通过
    警报('haaaax!')我对你关于XSS的第二个解释感兴趣。你能帮我看看吗