Skip to content
No description, website, or topics provided.
HTML JavaScript
Branch: master
Clone or download
Latest commit b4fc3dd Jul 15, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
allowed
notallowed
production
.gitignore
README.md
allowed.js
notallowed.js
package-lock.json
package.json
production.js

README.md

example CSRF

プリフライトリクエストによる CSRF 対策の動作サンプル

インストール方法

  1. Git リポジトリをクローン
git clone https://github.com/okamoai/example-csrf.git
  1. プロジェクトディレクトリに移動
cd example-csrf
  1. Node.js パッケージをインストール
npm install

サンプルの確認の仕方

  1. 動作確認用のローカルサーバを起動
npm start
  1. 以下へアクセス
  1. API サーバの Session: Log in ボタンを押してセッションを作成します。(これをしないと API は 401 を返します)

  2. 正規サーバ、外部サーバのページからそれぞれリクエストを送れます。
    target: Danger が対策していないエンドポイント、 target: Safety がプリフライトリクエストによる CSRF 対策をしているエンドポイントです。
    プリフライトリクエストの検証に失敗すると API は 400 Bad Request を返します。

サンプルのリクエストパターンの API レスポンス結果が以下になります。

API(3010) 正規(3011) 外部(3012)
Danger/GET/form OK OK OK
Danger/POST/form OK OK OK
Danger/GET/ajax OK OK OK(CORS) *1
Danger/POST/ajax OK OK OK(CORS) *1
Safety/GET/form NG(400) NG(400) NG(400)
Safety/POST/form NG(400) NG(400) NG(400)
Safety/GET/ajax OK OK NG(CORS) *2
Safety/POST/ajax OK OK NG(CORS) *2

*1 ブラウザに CORS エラーが表示されますが、リクエスト自体は処理されています
*2 CORS エラーによりプリフライトリクエストで処理が止まります。カスタムヘッダを送信しないことでプリフライトリクエストを抑制できますが、カスタムヘッダの検証によって 400 が返却され、いずれにしても処理が止まります。

License

MIT © okamoai

You can’t perform that action at this time.