如何在 iOS 中获取 CSRF 令牌?
Posted
技术标签:
【中文标题】如何在 iOS 中获取 CSRF 令牌?【英文标题】:How to get CSRF token in iOS? 【发布时间】:2012-12-27 05:00:32 【问题描述】:所以我试图将表单数据发布到我同事的网站,以便从我的 iPhone 应用程序登录(简单的用户名和密码)。但是,看来我需要一个 CSRF 令牌才能发布。我已经对此进行了大量研究,并从我可以使用 GET 请求从csrftoken cookie
(我在这里读到:https://docs.djangoproject.com/en/dev/ref/contrib/csrf/)获得这个令牌。问题是,我不知道如何处理这个 GET 请求?我从哪里得到?
这是到目前为止我的帖子请求的代码:
NSURL *url = [NSURL URLWithString:SERVER_ADDRESS];
NSData* postData= //Some form data
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:[NSString stringWithFormat:@"%d", postData.length] forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
[request addValue:token forHTTPHeaderField:@"X-CSRFToken"]; //Where do I get this token from
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request
delegate:self];
[connection start];
我知道 *** 上有很多与此类似的帖子,但我没有找到任何似乎完整的答案。通常它只是将我引导到上面的链接,该链接仅填充了 AJAX 相关信息。非常感谢您的帮助!
【问题讨论】:
csrf 令牌在 cookie 中,默认情况下csrftoken
将在同一会话中为同一视图接收。在发布之前,您需要再次请求才能获取此 cookie。
你找到解决这个问题的方法了吗?
您好友网站上的任何表单都应该在表单中包含令牌。您可以从网站上的任何形式解析 html。否则,请他在网站上创建一个仅显示 csrf 令牌的页面。
【参考方案1】:
正如 cmets 中所指出的,您可以从您朋友网站上包含表单的任何页面解析它。
如果您想要一个自己的,请他在/ios/
呈现此模板
ios.html:
% csrftoken %
然后启动GET request:2 您可以使用正则表达式解析令牌的值:
NSString *regex = @"csrfmiddlewaretoken\".*?\"\(.*?\)\"";
最后,您必须在以下 HTTP POST 请求中设置 X-CSRFToken
的值。
【讨论】:
拿饼干怎么样?【参考方案2】:为了使用令牌登录(POST),当然你必须先获得 CSRF 令牌,就像你说的那样。如果您首先对登录页面进行 GET 调用(在您跟进 POST 之前),登录页面的结果将返回一个 csrf_token 如果您使用浏览器(打开开发人员工具窗格),您可以看到它,然后查看在响应内容下的网络窗格中查看服务器设置的 csrftoken cookie。就我而言:
Set-Cookie:csrftoken=PgQEgY3LAynbVeWRIzXoo2VFRLfd8Uqt; expires=Fri, 10-Nov-2017 18:59:54 GMT; Max-Age=31449600; Path=/; secure
从响应中解析出来后,设置一个像这样的标题:
X-CSRFToken: "PgQEgY3LAynbVeWRIzXoo2VFRLfd8Uqt"
在您的 POST 中使用登录名/密码信息。高温
【讨论】:
以上是关于如何在 iOS 中获取 CSRF 令牌?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Django 在前端获取 CSRF 令牌以及如何在 Postman 中使用它
如何在暴力模式下使用 OWASP ZAP 在授权请求中获取 CSRF 令牌