CSRF token

2560 ワード

「CSRF」とは?


Cross-Site Request Forgery
サーバ側は、有効性検証を要求するセキュリティトークンを処理します.
クライアントがPOSTメソッド要求を発行した場合.
リクエストのデータを検証する前に、まず
どこから来たのか確認しておきます.
クライアント要求にCSRFトークンがない場合、またはサーバ上の値と異なる場合.
お客様のリクエストが拒否されました.

Shang CSRFトークンはスキームを適用しません


登録
  • www.example.com.
  • 支払時、www.example.com?order number=212121&amount=9000形式のPOSTリクエスト.
  • しかし、悪意のあるハッカーはすでにwww.fake-example.comサイトにログインしています.
  • www.example.comにログインしたハッカーがorder numberとamountを改ざんすることを知っています.
  • 便利な支払いサービスは、支払い要求がexampleから来たのかfake-exampleから来たのか分からないので、直接支払いを行う.
  • そのまま罰金が科せられました.
  • 勘定科目CSRFトークンが適用されたシナリオ


    登録
  • www.example.com.
  • 「支払www.example」をクリックします.com?Order number=212121&amount=9000形式のPOSTリクエスト.ただし、サーバ側には、ユーザセッションとともに管理されるCSRFトークンも格納されている.
  • 悪意のあるハッカーwww.fake-example.com登録サイト.
  • ハッカーは要求の値を改ざんしたが、서버사이드에서CSRFトークンの管理値を特定できなかった.
  • CSRFエラー(403 Forbidden)
  • Forbiddenエラーが発生した場合



    https://docs.djangoproject.com/en/4.0/ref/settings/#std:setting-CSRF_FAILURE_VIEW
    # views.py
    def csrf_failure(request, reason=""):
        """403 Forbidden"""
        logout(request)
        return redirect("home")
        
    # settings.py
    if not DEBUG:
        # 403 Forbidden 발생 시
        CSRF_FAILURE_VIEW = "web.views.csrf_failure"