如何在iOS中获得CSRF令牌?

所以我试图将表单数据发布到我的同事的网站,以便从我的iPhone应用程序login(简单的用户名和密码)。 不过,看来我需要一个CSRF令牌才能发布。 我已经做了大量的研究,并从我可以从csrftoken cookie (我在这里阅读: https : csrftoken cookie )一个GET请求。 问题是,我不知道这个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]; 

我知道在StackOverflow上有很多类似的post,但我还没有find任何似乎完整的答案。 通常它只是引导我到上面的链接只填充了AJAX的相关信息。 帮助将不胜感激!

正如在评论中指出的,你可以从任何包含你朋友网站上的表单的页面parsing它。

如果你想为你自己的一个请求他在/ios/

ios.html:

 {% csrftoken %} 

然后启动一个GET请求: 2您可以使用正则expression式来分析令牌的值:

 NSString *regex = @"csrfmiddlewaretoken\".*?\"\(.*?\)\""; 

最后,您必须在您的以下HTTP POST请求中设置X-CSRFToken的值。

为了用令牌login(POST),当然你必须先得到CSRF令牌,就像你说的那样。 如果您首先对login页面进行GET调用(之后是POST),则login页面的结果将返回一个csrf_token,您可以看到是否使用浏览器(使用开放式工具窗格),并查看在响应内容的networking窗格中查看由服务器设置的csrftoken cookie。 在我的情况下:

 Set-Cookie:csrftoken=PgQEgY3LAynbVeWRIzXoo2VFRLfd8Uqt; expires=Fri, 10-Nov-2017 18:59:54 GMT; Max-Age=31449600; Path=/; secure 

在parsing完这个响应之后,设置一个如下头部:

 X-CSRFToken: "PgQEgY3LAynbVeWRIzXoo2VFRLfd8Uqt" 

在您的POST与login名/密码信息。 HTH