Php 在cURL中使用偷来的cookie绕过CSRF

Php 在cURL中使用偷来的cookie绕过CSRF,php,cookies,curl,yii,csrf,Php,Cookies,Curl,Yii,Csrf,我必须处理一个网页。此网页基于YII框架,登录页面受CSRF令牌保护。当我通过POST方法传递登录凭据时。我收到错误400和无法验证CSRF令牌的消息 我不知道如何绕过这个保护。我不明白这个机制。当我通过Chrome浏览器登录时,我看到了POST消息的样子。它有4个参数:CSRF密钥、登录名、密码、一个空变量。浏览器如何获得正确的CSRF键进行打磨 我有这个网页的登录名和密码,我可以作为普通用户登录。只有登录页面受CSRF保护。我是否可以在正常登录时使用浏览器创建的cookie(如何操作),将此

我必须处理一个网页。此网页基于
YII框架
,登录页面受
CSRF令牌
保护。当我通过
POST方法
传递登录凭据时。我收到
错误400
无法验证CSRF令牌的消息

我不知道如何绕过这个保护。我不明白这个机制。当我通过Chrome浏览器登录时,我看到了POST消息的样子。它有4个参数:CSRF密钥、登录名、密码、一个空变量。浏览器如何获得正确的CSRF键进行打磨


我有这个网页的登录名和密码,我可以作为普通用户登录。只有登录页面受CSRF保护。我是否可以在正常登录时使用浏览器创建的cookie(如何操作),将此
cookie设置为cURL
,并在登录页面后面开始处理
URL

经理在评论中回答。我把它放在这里是为了帮助其他人轻松识别答案。

CSRF密钥是为会话生成的,它以纯文本形式存在于登录页面中。我可以从登录页面的源代码中复制它,并提供cURL脚本作为POST变量。CSRF密钥在每次页面刷新后都不会更改,在注销之前密钥是有效的。在注销时,CSRF密钥将被打磨到服务器以终止


CSRF令牌已就位,使此精确操作变得困难。你需要一个更好的方法来欺骗使用PHP的浏览器。要做到这一点,请将所有cookie存储在通常称为“cookiejar”的容器中。从现在起,所有路由到此站点的curl请求都应该使用此cookie jar

接下来,您需要解析登录页面以获取提交的所有字段。这包括用户名、密码、CSRF和其他隐藏字段。确保每一个都有值。如果不应该由您输入(例如隐藏输入),请删除登录页面的HTML并将这些字段放入可以在登录帖子中传递的变量中。还要确保在登录帖子中将你抓取的登录页面的url作为推荐人发送


解析html可能会很枯燥,但如果您熟悉CSS选择器,库(如)应该会让它变得简单。

CSRF键有超时限制,所以如果您使用上次登录时的CSRF键(假设是两天前),登录页面应该抛出错误每次我重新登录Chrome时,CSRF键都是不同的。因此,我认为CSRF密钥仅用于一次。已解决:CSRF密钥是为会话生成的,它以纯文本形式存在于登录页面中。我可以从登录页面的源代码中复制它,并提供cURL脚本作为POST变量。CSRF密钥在每次页面刷新后都不会更改,在注销之前密钥是有效的。注销时,CSRF密钥被打磨到服务器以终止。@MrMgr您应该使用上面的注释,并用它回答您自己的问题。这样,任何其他有同样问题的人都可以很容易地看到如何解决它。