首页 > 解决方案 > 拒绝加载脚本“xyz.js”,因为它违反了 ChromeDriver Chrome 无头 Selenium 的以下内容安全策略指令

问题描述

我正在使用无头 chrome 运行 selenium 并收到错误拒绝加载图像,因为它违反了以下内容安全策略指令。我正在解析第三方网址。那么我需要在 selenium 中设置什么更改或选项来消除错误。

标签: seleniumgoogle-chromeselenium-chromedrivercontent-security-policygoogle-chrome-headless

解决方案


内容安全政策

内容安全策略是一种工具,开发人员可以使用该工具以各种方式锁定其应用程序,降低跨站点脚本等内容注入漏洞的风险,并降低其应用程序执行的权限。

CSP 并不是针对内容注入漏洞的第一道防线。相反,CSP 最适合用作纵深防御。它减少了恶意注入可能造成的危害,但它不能替代仔细的输入验证和输出编码。

内容安全策略指令

根据内容安全策略指令以减轻跨站点脚本攻击的风险,Web 开发人员应包括规范脚本和插件来源的指令。他们可以通过包括:

在任何一种情况下,开发人员都不应在其策略中包含'unsafe-inline'data:作为有效来源。两者都通过允许将代码直接包含在文档本身中来启用 XSS 攻击;最好完全避免它们。

Chrome 内容安全政策

为了缓解一大类潜在的跨站脚本问题,Chrome 的扩展系统纳入了内容安全策略 (CSP) 的一般概念。这引入了一些相当严格的策略,默认情况下将使扩展更加安全,并为您提供创建和执行规则来管理可以由您的扩展和应用程序加载和执行的内容类型的规则。

通常,CSP 用作您的扩展加载或执行的资源的阻止/允许列表机制。为您的扩展程序定义一个合理的策略使您能够仔细考虑您的扩展程序所需的资源,并要求浏览器确保这些是您的扩展程序可以访问的唯一资源。这些策略提供了超出您的扩展请求的主机权限的安全性;它们是额外的保护层,而不是替代品。

在 Web 上,此类策略是通过 HTTP 标头或元元素定义的。在 Chrome 的扩展系统内部,两者都不是合适的机制。相反,扩展的策略是通过扩展的manifest.json文件定义的,如下所示:

{
  ...,
  "content_security_policy": "[POLICY STRING GOES HERE]"
  ...
}

解决方案

  • 创建新的Chrome 配置文件
  • 浏览到Disable Content-Security-Policy并永久添加到 Chrome的扩展页面。
  • 在启动脚本时使用相同的自定义Chrome 配置文件和扩展程序:

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    options = Options()
    options.add_argument("user-data-dir=C:\\Users\\user_name\\AppData\\Local\\Google\\Chrome\\User Data\\Profile 2")
    driver = webdriver.Chrome(executable_path=r'C:\path\to\chromedriver.exe', chrome_options=options)
    driver.get("https://www.google.co.in")
    

tl; 博士


推荐阅读