次のケースが403になることを確認します。
CSRFトークンなし
CSRFトークンが空
1文字変更したトークン
別セッションのトークン
不正Origin
Cookieなし
安全でないメソッドへの不正リクエスト
次のURLへアクセスしても、データが変わらないことを確認します。
GET /account/delete/
GET /profile/update/[email protected]
GET /admin/promote/?user=attacker
GETでは確認画面を表示し、実際の変更はCSRF保護されたPOSTで行います。
DjangoではCSRF失敗がdjango.security.csrfロガーへ記録されます。
LOGGING = {
"version": 1,
"disable_existing_loggers": False,
"handlers": {
"console": {
"class": "logging.StreamHandler",
},
},
"loggers": {
"django.security.csrf": {
"handlers": ["console"],
"level": "WARNING",
"propagate": False,
},
},
}