【问题标题】:Bypass blocking of subresource requests whose URLs contain embedded credentials绕过阻止其 URL 包含嵌入式凭据的子资源请求
【发布时间】:2017-12-15 19:10:16
【问题描述】:

我已经通过 URL 中带有令牌的链接自动验证访问我们内部 wiki 的用户,如下所示:

href="https://user:pass@host/"

在 Chrome 59 中,这是被阻止的。

[弃用] 其 URL 包含嵌入式凭据(例如 https://user:pass@host/)的子资源请求被阻止。

我阅读并在这样的 ajax 请求中绕过了它:

how to replace embedded credentials in subresource requests

================================================ ==========================

我的问题是:

有谁知道如何直接在链接中执行此操作,或者您可以提供某种解决方法吗?这甚至可能吗?

【问题讨论】:

  • 我正在使用一个 Chrome 插件,该插件使用该方法登录安全摄像头,我尝试了几种不同的方法,并且能够使用以下格式使登录正常工作。 example.com:1234/pagename.cgi?user=username&pwd=password。也许它会为你工作。
  • @Ryan89 谢谢你,我在找什么

标签: html google-chrome authentication url parameters


【解决方案1】:

传递命令行选项“--disable-blink-features=BlockCredentialedSubresources”可恢复预期行为。如果您使用的是 Selneium,您可以将其作为浏览器功能中的 args 选项传递以恢复预期的行为。

PHP: 'chromeOptions' => array('args' => ['--disable-blink-features=BlockCredentialedSubresources']);

Python: 能力['chromeOptions'] = {'args': ['--headless']}

根据 Chromium 票证 (https://bugs.chromium.org/p/chromium/issues/detail?id=731618),此行为可能不会在未来版本中恢复,尽管它处于“弃用”状态。在这种情况下,最好查看 ssh 管道来测试或将 IP 列入白名单,以防止 HTTP Auth 交互。

安东尼

【讨论】:

    【解决方案2】:

    如果您的页面包含 css、javascript 或其他具有相对(“文件夹/文件”)或基本相对(“/文件夹/文件”)位置的东西,那么问题是这些包含的文件将从 URL 获取相对于页面的基本 URL,其中包括一个 user:pass 组件。

    正是 user:pass 组件(你可能永远不会暗示...)使得子资源的 URL 非法,遵循this change to Chrome

    如果这是您的问题,您可以通过向您的页面添加 <base href="https://host/"> 标记来解决它(即相同的基地址,但没有 user:pass 组件)。 (如果您的页面位于子目录中,您还需要在基本 href 中包含子目录,以使完全相对的 URL 起作用。)

    需要明确的是,<a href="https://user:pass@host/">Link</a> 之类的链接仍然有效(只要 user:pass URL 位于在新页面中打开的链接中,并且不是 iframe 的 URL,比如说 - 现在已被禁止) .但即使链接有效,我上面描述的问题也适用于新打开页面中包含在相对路径中的元素。

    更新:

    这已被接受为bug in Chrome,与禁止 user:pass 子资源 URL 的新更改直接相关。不幸的是,通过该讨论中的链接,似乎一个提议且很可能的解决方案是to remove support for user:pass URLs entirely。任何知情的 cmets 添加到该讨论中并主张保留此功能可能会有所帮助。

    【讨论】:

      【解决方案3】:

      要处理这个问题,我们必须传递 chrome 选项:“--disable-blink-features=BlockCredentialedSubresources”);

      完整代码如下:

      ChromeOptions options = new ChromeOptions();
              options.addArguments("--start-maximized");
              options.addArguments("--disable-blink-features=BlockCredentialedSubresources");
      
              Map<String, Object> prefs = new HashMap<String, Object>();
              prefs.put("credentials_enable_service", false);
              prefs.put("profile.password_manager_enabled", false);
              options.setExperimentalOption("prefs", prefs);
      
              DesiredCapabilities capabilities = DesiredCapabilities.chrome();
              capabilities.setCapability(ChromeOptions.CAPABILITY, options);
              driver = new ChromeDriver(capabilities);
      

      【讨论】:

        猜你喜欢
        • 2017-12-19
        • 1970-01-01
        • 2021-12-01
        • 2017-12-17
        • 1970-01-01
        • 2018-01-28
        • 2022-01-01
        • 2017-07-20
        • 2017-07-23
        相关资源
        最近更新 更多