首页 > 解决方案 > 访问不需要登录的网站时,CSRF 检查失败是什么原因?

问题描述

我是网络爬虫和 HTML 的新手。我正在尝试获取此站点的内容: https://services.ecourts.gov.in/ecourtindiaHC/cases/s_orderdate.php?state_cd=24&dist_cd=1&court_code=1&stateNm=Sikkim 但出现一些错误。

session = requests.Session()
path = 
'https://services.ecourts.gov.in/ecourtindiaHC/cases/s_orderdate.php? 
 state_cd=24&dist_cd=1&court_code=1&stateNm=Sikkim'
 r2n = session.post(path)
 r2n.content

错误:

<html>
  <head>
    <title>CSRF check failed</title>
    <script type="text/javascript">var csrfMagicToken = "sid:c5118ae8a9e61592d303891cc2cd269c204972a8,1563237610";var csrfMagicName = "__csrf_magic";</script><script src="csrf-magic.js" type="text/javascript"></script>
  </head>
  <body>
    CSRF check failed. Please enable cookies.<br />Debug: <script type="text/javascript">CsrfMagic.end();</script>
  </body>
</html>

标签: javascriptpythonhtmlrequestweb-crawler

解决方案


CSRF 阻止用户使用相同的令牌从他们自己的网站会话之外发出请求。您可能正在提交在浏览器会话中生成的某种形式的令牌,然后从另一台设备发出请求。更多关于 CSRF 的信息在这里

CSRF 是一种欺骗受害者提交恶意请求的攻击。它继承受害者的身份和特权,代表受害者执行不受欢迎的功能。对于大多数站点,浏览器请求会自动包含与站点关联的任何凭据,例如用户的会话 cookie、IP 地址、Windows 域凭据等。因此,如果用户当前通过了站点的身份验证,站点将无法区分受害者发送的伪造请求和受害者发送的合法请求。

从本质上讲,它认为您的请求是恶意的人,让您从他们的计算机上拨打电话。

鉴于错误消息:CSRF check failed. Please enable cookies.,我觉得此令牌存储在 cookie 中。以下是我将如何解决这个问题:

  1. 打开 chrome 开发者控制台
  2. 打开网络选项卡
  3. 重新加载页面
  4. 右键单击主页的请求
  5. 鼠标点击“复制”,然后在侧边下拉选择“复制为cURL”
  6. 转到https://curl.trillworks.com并输入您的 cURL 命令以获取将发出相同请求的 python 请求程序。

推荐阅读