私の GET リクエストのほとんどは Angular によって起動されるため、ヘッダーに CSRF トークンを簡単に設定できます。これは、POST リクエストに対してはすぐに使用できますが、GET リクエストに対しても CSRF 保護を使用できるかどうか疑問に思っていました。
私の最初の本能は@csrf_protect
、ビューの get メソッドの前に追加することでした。たとえば、次のようになります。
class ProjectView(View):
@csrf_protect
def get(self, request, *args, **kwargs):
...
ただし、これによりエラーが発生します。
AttributeError at /project
'ProjectView' object has no attribute 'COOKIES'
File "c:\Apps\msysgit\simpletask\lib\site-packages\django\middleware\csrf.py" in process_view
95. request.COOKIES[settings.CSRF_COOKIE_NAME])
だから私は、GETリクエストが提供しないPOSTリクエストが提供するものがあると推測しています。これを行うより良い方法はありますか?
また、すべての機密情報は POST リクエストを介して取得する必要があると誰かが言及する前に (最近何度か目にしたように)、GET に固執しようとする理由は、RESTful ガイドラインに従って構築しようとしているからです。つまり、GET リクエストです。はデータのプル用、POST は新しいレコード用、PUT は更新用、DELETE はデータの削除用です。
編集:
私が上記のことを試みるべきではないという意見があるように思われるので、私はある程度同意しますが、私が防止しようとしている悪用については、次の 3 つのリンクで説明されています。