我试图通过模拟点击下载按钮来使用selenium
下载文件,但是Chrome报告ERR_BLOCKED_BY_XSS_AUDITOR
。如果我使用"--disable-xss-auditor"
参数绕过,则该页面将被重新加载而没有下载任何内容。对我来说似乎奇怪的是,当我实际上甚至在selenium
控制的Chrome会话中用鼠标下载文件时,文件下载得很好。
请帮助我了解xss auditor
的作用?为什么我不能使用selenium
下载文件?
顺便说一句,如果有问题,我正在使用python
。
谢谢
答案 0 :(得分:0)
XSS Auditor是Chrome和Safari的内置功能,旨在缓解跨站点脚本(XSS)攻击。它旨在确定查询参数是否包含恶意JavaScript,并在认为有效负载已注入服务器响应中的情况下阻止响应。
XSS是一个漏洞,当数据被(误)解释为代码并在受害者的浏览器上执行时,就会发生此漏洞。这个想法是使用像Selenium WebDriver这样的无头浏览器,并注入XSS有效负载以及功能和用户交互测试
Python与此无关,我认为这可能是chrome版本或其他内容
我已经分享了链接,可以帮助您更好地理解。
答案 1 :(得分:0)
我放慢了点击的速度(下载需要2次点击,在它们之间增加了一个睡眠),它可以正常工作!不知道发生了什么事...
答案 2 :(得分:0)
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();