我必须处理一个网页。此网页基于YII framework
,登录页面受CSRF tokens
保护。当我通过POST method
传递登录凭据时。我收到了error 400
和The CSRF token could not be verified
消息。
我不知道如何通过这种保护。我不明白这个机制。当我通过Chrome浏览器登录时,我会看到POST消息的样子。它有4个参数:CSRF密钥,登录名,密码,一个空变量。浏览器如何获得正确的CSRF密钥进行打磨?
我有这个网页的登录名和密码,我可以以普通用户身份登录。只有登录页面受CSRF保护。我是否可以在正常登录时使用浏览器创建的cookie(如何操作),提供此cookie to cURL
并在登录页面后面开始处理URLs
?
答案 0 :(得分:2)
MrMgr在评论中回答。我已经把它放在这里帮助其他人轻松确定答案。
为会话生成CSRF密钥,它在LOGIN页面内作为纯文本。我可以从登录页面的源代码中复制它,并提供给cURL脚本以作为POST变量过去。每次页面刷新后CSRF密钥都不会更改,KEY在注销之前有效。注销时,CSRF密钥将被打磨到服务器以进行终止。
答案 1 :(得分:0)
CSRF令牌已经到位,难以实现这一精确行动。您需要一种更好的方式来欺骗使用PHP的浏览器。为此,将所有cookie存储在通常称为“cookie jar”的内容中。 PHP的curl has that capability实现。从现在开始,所有发送到此站点的curl请求都应使用此cookie jar。
接下来,您需要解析登录页面以获取所有提交的字段。这包括用户名,密码,CSRF和其他隐藏字段。确保每个都有值。如果您不应该输入它(例如隐藏的输入),请抓取登录页面的HTML并将这些字段放入您可以在登录POST中传递的变量中。另外,请务必在登录POST中发送您作为引用者抓取的登录页面的URL。
解析html可能很乏味,但如果您熟悉CSS选择器,那么像SimpleHTMLDOM这样的库应该会很简单。