python-3.x - 警告:使用 Selenium Chromedriver Python 启用跨站点请求伪造控制错误
问题描述
我无法通过以下方式直接导航到网页driver.get('https://example.com')
该网站显示一条消息:
警告:跨站点请求伪造控制已启用
但是如果我使用 Selenium 的 ActionChains 实现,
ActionChains(driver).move_to_element(menu).click(hidden_submenu).perform()
我可以通过网站成功导航到新网页“ https://example.com ”
我试过保存和恢复cookies。没有成功。
我还需要做什么driver.get()
才能导航到网站的不同网页?
解决方案
跨站请求伪造 (CSRF)
跨站点请求伪造 (CSRF)是一种攻击,它强制最终用户在当前已通过身份验证的 Web 应用程序上执行不需要的操作。CSRF 攻击专门针对状态更改请求,而不是窃取数据,因为攻击者无法查看对伪造请求的响应。借助一些社会工程学的帮助(例如通过电子邮件或聊天发送链接),攻击者可能会诱骗 Web 应用程序的用户执行攻击者选择的操作。如果受害者是普通用户,成功的 CSRF 攻击会迫使用户执行状态更改请求,例如转移资金、更改电子邮件地址等。如果受害者是管理帐户,CSRF 可能会破坏整个 Web 应用程序。
因此,当您将Selenium的ActionChains
实现用作:
ActionChains(driver).move_to_element(menu).click(hidden_submenu).perform()
大概您正在访问一个其他网页,在该网页上建立了一个会话,并且对许多其他会话属性进行了身份验证。在下一步中,您将使用Selenium的ActionChains
实现来调用click()
WebElement ,从而将您带到新网页https://example.com
。
https://example.com
但是在您的替代方法中,您试图直接导航到所需会话属性不存在的网页。因此,这种情况下的会话不会建立,您会看到警告为:
Warning: cross-site request forgery control is enabled
解决方案
更简单的解决方案是遵循实际流程,即访问将建立会话并验证所需会话属性的初始网页。在下一步中,您可以使用 Selenium 的 ActionChains 实现来调用click()
所需的 WebElement,这会将您带到新网页https://example.com。
选择
作为替代方案,您可以创建一个Chrome 配置文件并使用指定的Chrome 配置文件来存储SessionAttributes并根据您的要求重复使用。
推荐阅读
- r - geom_line 不显示线
- docker - 使用 Nginx 的子域从端点获取 JSON
- reactjs - 选中时如何只给MUI Switch边框样式?
- matlab - Matlab中的多变量积分问题
- ruby-on-rails - Heroku deplpy 失败并显示“..bin/bundle: line 11: require: command not found... Failed to install gems via Bundler.”
- git - package.json 中的 git 依赖项因“访问被拒绝(公钥)”而出错?
- ios - 如何以编程方式检查 iPhone/iPad 设备是否有原深感摄像头?
- windows - 如何在 Windows 上更改 Macroquad Rust 框架的任务栏图标和标题?
- c++ - 为 K 排序数组问题编译此代码时出错
- node.js - 当查询参数值中包含 URL 时,nginx 代理会抛出 403 禁止