【问题标题】:How do I protect the ports that chromedriver use?如何保护 chromedriver 使用的端口?
【发布时间】:2019-08-21 21:14:31
【问题描述】:

通常当我运行chromedriver 时,我总是得到这个输出,我相信每个人在运行chromedriver 时都会得到。这不是整个输出,而是一个特定的句子。

Only local connections are allowed. 
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.

正如标题所说,我总是得到输出。如何确保 ChromeDriver 的端口仅使用受保护的端口?

【问题讨论】:

    标签: java google-chrome selenium-webdriver webdriver selenium-chromedriver


    【解决方案1】:

    此 INFO 消息...

    Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
    

    ... 是由 ChromeDriver v2.46

    引起的错误造成的

    分析

    根据2.46 produces unexpected debug.log file if verbose logging is enabled 的讨论,在logging.ccInitLogging() 函数中,甚至在调用logging::InitLogging 之前(在函数的最后一行),一些日志消息就写得太早了。这在 LinuxMac OS 上是 OK 的,默认日志目标在预期的位置。但在 Windows 上,默认的日志目的地是一个名为 debug.log 的文件。

    所以 ChromeDriver 团队需要在调用 logging::InitLogging 之后,将两个 VLOG 调用移除到方法的末尾。

    此问题已通过 commit 得到解决,并且该修复已在 ChromeDriver 73.x

    中提供

    保护chromedriver使用的端口

    对于端口使用,我们无能为力,因为@barancev mentions ChromeDriver 尝试使用依赖于系统的临时端口范围检测器找到免费的Ephemeral portephemeral port 是一个短暂的端点,由操作系统在程序请求任何可用的用户端口时创建。操作系统从预定义的范围内选择端口号,通常在 1024 到 65535 之间,并在相关 TCP 连接终止后释放该端口。

    默认情况下,系统最多可以创建大约 4,000 个在 Windows Server 2003 上同时运行的临时端口,在 Windows Server 2008 上大约可以创建 16,000 个。


    解决方案

    升级到 ChromeDriver 73.x 将解决这个问题。


    结尾

    这些日志消息反映了ChromeDriver - Security Considerations

    ChromeDriver 是一个强大的工具,它可能会在坏人手中造成伤害。使用 ChromeDriver 时,请遵循以下建议以确保其安全:

    • 默认情况下,ChromeDriver 只允许本地连接。如果您需要从远程主机连接到它,请使用命令行上的--whitelisted-ips 开关来指定允许连接到 ChromeDriver 的 IP 地址列表。
    • 如果可能,请使用无法访问敏感本地或网络数据的测试帐户运行 ChromeDriver。切勿使用特权帐户运行 ChromeDriver。
    • 如果可能,请在受保护的环境(例如 Docker 或虚拟机)中运行 ChromeDriver。
    • 使用防火墙防止未经授权的远程连接到 ChromeDriver。
    • 如果您通过 Selenium Server 等第三方工具使用 ChromeDriver,请务必同时保护这些工具的网络端口。
    • 使用最新版本的 ChromeDriver 和 Chrome。

    您可以在 Chrome here 上找到受限端口列表。

    【讨论】:

      【解决方案2】:

      我也有同样的问题,我所做的只是将 https 添加到链接中。例如: driver.get("https://www.yahoo.com");

      这解决了问题,我的脚本正在运行。

      【讨论】:

      • 我的 selenium 项目是一个旧项目,但我检查了一下,我已经添加了 https,但是现在我运行它,输出现在显示 Only local connections are allowed. 所以我想从我们结束不能真正改变输出。也许在较旧的 chromedriver.exe 上它仍然会显示,但不会在我们今天拥有的最新 chromedriver.exe 上显示。因为它在谷歌的手中,它决定了我们运行它时会显示什么。
      【解决方案3】:

      这只是一条信息性消息。没什么好担心的。即使我收到以下消息。

      Starting ChromeDriver 83.0.4103.39 (ccbf011cb2d2b19b506d844400483861342c20cd-refs/branch-heads/4103@{#416}) on port 9515
      Only local connections are allowed.
      Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
      ChromeDriver was started successfully.
      

      让我分解消息并解释一下。

      第 1 部分:Please protect ports used by ChromeDriver

      这适用于任何程序。需要保护端口,而不允许外人访问。由于您在 Chromedriver 中使用默认白名单,因此您会收到消息 Only local connections are allowed

      当您运行此驱动程序时,它将使您的脚本能够访问此驱动程序并在 Google Chrome 上运行命令。

      这可以通过在本地网络中运行的脚本 (Only local connections are allowed.) 或通过在外部网络中运行的脚本 (All remote connections are allowed.) 来完成。使用本地连接选项总是更安全。默认情况下,您的 Chrome 驱动程序可通过端口 9515 访问。

      如果您希望允许所有连接而不仅仅是本地连接,请参阅this answer

      第 2 部分:prevent access by malicious code

      有不同种类的脚本可以检查这些端口是否打开。由于您打开 Chromedriver 只允许 local connections 它更安全,而且您只需担心机器中的脚本可能会尝试访问 Chromedriver 的端口。

      但是,如果您有除 local connections 之外的白名单 IP,那么您必须通过云服务提供商或您的操作系统使用防火墙规则保护这些端口。

      欲了解更多信息,请参阅Security Configurations given be ChromeDriver

      【讨论】:

        猜你喜欢
        • 2013-03-30
        • 1970-01-01
        • 2015-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-21
        • 2012-05-25
        相关资源
        最近更新 更多