Edited at

nginxの設定ミスで起こるreferer/origin検証の問題

More than 1 year has passed since last update.


はじめに

この記事は下記リンクの日本語翻訳記事です

https://github.com/yandex/gixy/blob/master/docs/en/plugins/origins.md

翻訳が誤っている場合はコメントか@no1zy_secまでお知らせいただけると幸いです。


[origins] nginxの設定ミスで起こるreferer/origin検証の問題

RefererOriginヘッダの検証に正規表現を使用するのは珍しいことではありません。よくX-Frame-Optionsヘッダ(クリックジャッキングの保護) または Cross-Origin Resource Sharing(CORS)を設定するために必要とされています。


この設定の最も一般的な間違い


  • 正規表現の間違い

  • サードパーティのオリジンを許可している


どうやって見つけるか



  1. $http_origin または $http_refererのチェックを担当している全てのifディレクティブを探し出してください。

  2. 正規表現が安全なことを確認してください。

設定ミスの例:

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の設定ミスで起こるリファラの検証不備