Django フレームワークの CSRF の使用法
目次
世界的な使用
csrf ミドルウェアは、Django プロジェクト構成でデフォルトでグローバルに使用され、コメントアウトされると使用できなくなります。
ただし、あまり安全でないことはお勧めできません。
csrfトークンを設定する
フォームの使用
csrf トークン テンプレート タグをフォーム フォームで直接使用し、送信時に csrf を自動的に検証します。
{% csrf_token %}
スクリプトの使用
プロジェクトでは、多くの操作で ajax の操作と送信が必要になります。
ソース コードを表示すると、csrf トークン タグがフォーム内に csrfmiddlewaretoken (デフォルト) という名前の非表示の入力ボックスを作成していることがわかります。
Js はトークンを取得および設定します
let csrf = $('input[name="csrfmiddlewaretoken"]').val()
$.ajax({
type: 'POST',
url: "/media_list",
data: {csrfmiddlewaretoken:csrf},
dataType: 'json',
success: function (data) {
// 将mp3list赋值给this.songs
this.songs = data.list;
// 调用渲染歌曲列表的方法
this.renderSongList();
}.bind(this),
error: function (e) {
console.log("ERROR : ", e);
}
});
別途免除
メソッドで csrf 保護を設定したくない場合は、csrf デコレーターを使用できます。
csrfクラスライブラリの紹介
from django.views.decorators.csrf import csrf_exempt
csrf からの個別の除外を設定する
csrf_exempt を使用して、このメソッドを csrf 検証から個別に除外します。
@csrf_exempt
def upload_music(request):
個別の保護
より適切なのは、ほとんどの関数とメソッドは csrf を検証する必要がなく、検証が必要な場合はわずかです。
グローバルCSRFをオフにする
settings.py のミドルウェアを変更し、csrf ミドルウェアをコメントアウトします。
csrfライブラリの紹介
from django.views.decorators.csrf import csrf_protect
設定機能保護
ビューでメソッドを設定し、csrf_protect デコレーターを使用して、upload_music メソッドに対して個別に csrf 検証を実行します。
@csrf_protect
def upload_music(request):
csrfトークンの構成
csrf 属性は settings.py で設定でき、属性は次のように設定できます。
CSRF_HEADER_NAME = 'HTTP_X_CSRF_AARONTOKEN'
CSRF_COOKIE_SAMESITE = 'Strict'
CSRF_COOKIE_NAME = 'MyCookie'
CSRF_COOKIE_HTTPONLY = False
CSRF_COOKIE_SECURE = False
CSRF_TRUSTED_ORIGINS = []
要約する
Csrf 検証はプロジェクトのセキュリティにとって非常に重要であり、上記の csrf の設定と使用を通じて、Django フレームワークについてある程度の理解が得られ、より柔軟に使用できるようになりました。