【发布时间】:2015-09-11 00:22:33
【问题描述】:
我正在从 iOS 客户端发送 POST 请求
-(void)loadFavorite:(NSArray*)favorites{
//data and url preparation
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:@"https://example.com" forHTTPHeaderField: @"Referer"];
[request setValue:[NSString stringWithFormat:@"%tu", [requestData length]] forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody: requestData];
if ([Tools isNetWorkConnectionAvailable]) {
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
//response handle
}
}
这是回复:
<div id="summary">
<h1>Forbidden <span>(403)</span></h1>
<p>CSRF verification failed. Request aborted.</p>
</div>
我正在使用 Flask 框架和 pythonanywhere 进行托管。
当我重新加载 python 脚本时它工作正常,但几个小时/几天后,CSRF 验证失败错误再次出现。
即使我尝试在我的 app.py 中禁用 CSRF 验证:
app.config['WTF_CSRF_CHECK_DEFAULT'] = False
App.py 脚本:
//some import error handlers ...
app = Flask(__name__)
app.config['WTF_CSRF_CHECK_DEFAULT'] = False
@app.route('/api/favorites', methods=['POST'])
def get_favorites_beaches():
if not request.json or not 'favorite' in request.json:
abort(400)
//data process
if __name__ == '__main__':
app.run(host='0.0.0.0',debug=True)
如何正确实现 CSRF 验证或如何禁用它?
【问题讨论】:
-
Flask 没有内置 CSRF 保护。你是用 Flask-WTF 还是类似的扩展来添加它?
-
不,我不想使用它,我不明白为什么会收到此错误。我不使用flask_wtf.csrf、CsrfProtect,也不在app.py中使用CsrfProtect(app)。
-
如果可能我想禁用它,但我不知道为什么 app.config['WTF_CSRF_CHECK_DEFAULT'] = False 在 app.py 中不起作用。
-
如果您不使用 WTF,那么 'WTF_CSRF_CHECK_DEFAULT' 将不起作用。
-
好的,我应该导入 Flask-WTF 或类似的扩展来使 WTF_CSRF_CHECK_DEFAULT 工作吗?
标签: python ios flask csrf csrf-protection