使用硒下载文件时,ERR_BLOCKED_BY_XSS_AUDITOR

时间:2019-01-16 04:24:04

标签: html selenium selenium-webdriver selenium-chromedriver xss

我试图通过模拟点击下载按钮来使用selenium下载文件,但是Chrome报告ERR_BLOCKED_BY_XSS_AUDITOR。如果我使用"--disable-xss-auditor"参数绕过,则该页面将被重新加载而没有下载任何内容。对我来说似乎奇怪的是,当我实际上甚至在selenium控制的Chrome会话中用鼠标下载文件时,文件下载得很好。

请帮助我了解xss auditor的作用?为什么我不能使用selenium下载文件?

顺便说一句,如果有问题,我正在使用python

谢谢

3 个答案:

答案 0 :(得分:0)

XSS Auditor是Chrome和Safari的内置功能,旨在缓解跨站点脚本(XSS)攻击。它旨在确定查询参数是否包含恶意JavaScript,并在认为有效负载已注入服务器响应中的情况下阻止响应。

XSS是一个漏洞,当数据被(误)解释为代码并在受害者的浏览器上执行时,就会发生此漏洞。这个想法是使用像Selenium WebDriver这样的无头浏览器,并注入XSS有效负载以及功能和用户交互测试

Python与此无关,我认为这可能是chrome版本或其他内容

我已经分享了链接,可以帮助您更好地理解。

Chrome: ERR_BLOCKED_BY_XSS_AUDITOR details

答案 1 :(得分:0)

我放慢了点击的速度(下载需要2次点击,在它们之间增加了一个睡眠),它可以正常工作!不知道发生了什么事...

答案 2 :(得分:0)

X-XSS-Protection

HTTP this响应标头是Internet Explorer,Chrome和Safari的一项功能,当页面检测到反射的跨站点脚本(X-XSS-Protection)攻击时,将阻止页面加载。尽管当站点实施功能强大的XSS禁止使用内联JavaScript( 'unsafe-inline' )时,在现代浏览器中这些保护在很大程度上是不必要的,但它们仍可以为较早的用户提供保护尚不支持CSP的网络浏览器。

Header type               Response header
-----------               ---------------
Forbidden header name     no

语法

  • X-XSS-Protection: 0:禁用XSS过滤。
  • X-XSS-Protection: 1:启用XSS过滤(通常是浏览器中的默认设置)。如果检测到跨站点脚本攻击,则浏览器将对页面进行清理(删除不安全的部分)。
  • X-XSS-Protection: 1 mode = block 启用XSS过滤。如果检测到攻击,浏览器不会清除页面,而是阻止呈现页面。
  • X-XSS-Protection: 1 report =(仅限Chromium)。启用XSS过滤。如果检测到跨站点脚本攻击,浏览器将清理该页面并报告违规行为。这将使用CSP report-uri指令的功能来发送报告。

背景

根据Content-Security-Policy Chromium 小组进行了两项更改:

  • 将默认行为更改为X-XSS-Protection: 1; mode=block,该行为会在检测到XSS时导航到唯一的来源,而不是过滤掉特定的脚本,从而阻止页面加载。
  • 不建议使用过滤器模式,以在将来的某个日期完全删除它。

实施状态

Intent to Ship: Changes to the XSS Auditor:默认情况下,Chrome的XSS Auditor应该阻止页面,而不是过滤掉可疑的反射XSS。此外,我们应该删除过滤选项,因为过去破坏页面脚本的特定部分本身就是XSS向量。

根据XSS Auditor blocks by default,我们讨论了此问题,并尝试进行修复。 XSS Auditor: Block by default, remove filtering中进行了更多讨论,最后在False positives with ERR_BLOCKED_BY_XSS_AUDITOR中,Chromium小组决定了状态:WontFix

解决方案

您需要诱使 WebDriverWait 使所需的元素可点击。以下是 WebDriverWait 实现的一些示例:

  • Java

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.linkText("text_within_the _link"))).click(); 
    
  • Python

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.LINK_TEXT, "text_within_the _link"))).click()
    
  • C#

    new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementToBeClickable(By.LinkText("text_within_the _link"))).Click();
    

参考