11

私は通常のフラスコウェブ+フラスコレストフルを使用しています。したがって、Web には CSRF 保護が必要ですが、REST には必要ありません。

CsrfProtect(app)を有効にした瞬間flask-wtf、すべての投稿ユニット テストでflask-restful400 が返されます。

とにかくセッション処理なしでモバイルハンドセットから来ているため、RESTサービスのCSRF保護を無効にする方法はありますか?したがって、CSRFはあまり意味がありません。

これは私がそれをテストする方法です:

rv = self.client.post('api/v1.0/verify-email', environ_base={'REMOTE_ADDR': '127.0.0.1'}, headers={'Content-Type':'application/json'}, data=json.dumps(data))
self.check_content_type(rv.headers)
eq_(rv.status_code, 412)
4

6 に答える 6

24

API オブジェクトに直接追加する必要がある@csrf.exemptデコレータをdecorators引数;で使用できます。これにより、すべてのAPI ルートにデコレーターが適用されます。

csrf_protect = CsrfProtect(app)
api = restful.Api(app, decorators=[csrf_protect.exempt])

リソース メソッド デコレーターは、デコレーターが機能するために必要な最終的なビュー関数ではないため、使用できませんexempt

個々のリソースを保護し、他のリソースを除外することはできないようです。これは、除外されるビューを記録する Flask-Wtf の方法で使用される方法の制限です。

于 2014-02-02T11:25:32.550 に答える
-2

test_config で WTF_CSRF_ENABLED = False を設定できます。テストのためにのみ無効にしたい場合は、そうです。

于 2017-03-15T12:56:32.433 に答える