はじめに
この記事は下記リンクの日本語翻訳記事です
翻訳が誤っている場合はコメントか@no1zy_secまでお知らせいただけると幸いです。
[origins] nginxの設定ミスで起こるreferer/origin検証の問題
RefererやOriginヘッダの検証に正規表現を使用するのは珍しいことではありません。よくX-Frame-Optionsヘッダ(クリックジャッキングの保護) または Cross-Origin Resource Sharing(CORS)を設定するために必要とされています。
この設定の最も一般的な間違い
- 正規表現の間違い
- サードパーティのオリジンを許可している
どうやって見つけるか
-
$http_originまたは$http_refererのチェックを担当している全てのifディレクティブを探し出してください。 - 正規表現が安全なことを確認してください。
設定ミスの例:
if ($http_origin ~* ((^https://www\.yandex\.ru)|(^https://ya\.ru)$)) {
add_header 'Access-Control-Allow-Origin' "$http_origin";
add_header 'Access-Control-Allow-Credentials' 'true';
}
対策
- 正規表現を修正するか、正規表現の使用をやめる
-
Refererヘッダの検証に正規表現を使用する場合、ngx_http_referer_moduleを使用することができる場合があります。 - 正規表現ではなく
mapディレクティブを使用する方が優れている場合があります。
関連リンク
nginxの設定ミスで起こるHTTP Splitting
nginxの設定ミスで起こるSSRF
nginxの設定ミスで起こるパス トラバーサル
nginxの設定ミスで起こるMultiline response headers
nginxの設定ミスで起こるレスポンスヘッダの出力不備
nginxの設定ミスで起こるHostヘッダフォージェリ
nginxの設定ミスで起こるリファラの検証不備