いくつかのデバッグの後、mod_securityのコアルールセットが(オプション!)ACCEPTヘッダーフィールドを持たないリクエストをブロックすることがわかりました。
これは私がログで見つけるものです:
ModSecurity:警告。 「rx ^ OPTIONS $」と「REQUEST_METHOD」の一致が必要です。 [ファイル "/etc/Apache2/conf.d/modsecurity/modsecurity_crs_21_protocol_anomalies.conf"] [line "41"] [id "960015"] [msg "Request Missing a Accept Header"] [severity "CRITICAL"] [tag " PROTOCOL_VIOLATION/MISSING_HEADER "] [ホスト名" example.com "] [uri"/"] [unique_id" T4F5 @ H8AAQEAAFU6aPEAAAAL "]
ModSecurity:コード400(フェーズ2)でアクセスが拒否されました。 「rx ^ OPTIONS $」と「REQUEST_METHOD」の一致が必要です。 [ファイル "/etc/Apache2/conf.d/modsecurity/optional_rules/modsecurity_crs_21_protocol_anomalies.conf"] [line "41"] [id "960015"] [msg "Request Missing a Accept Header"] [severity "CRITICAL"] [タグ "PROTOCOL_VIOLATION/MISSING_HEADER"] [ホスト名 "example.com"] [uri "/"] [unique_id "T4F5 @ H8AAQEAAFU6aPEAAAAL"]
なぜこのヘッダーが必要なのですか? 「ほとんどの」クライアントがこれらを送信することを理解しましたが、それらの不在がセキュリティ上の脅威と見なされるのはなぜですか?
私はこれらのルールを記述しませんでしたが、理解すると、このヘッダーを含まないクライアントと悪意のあるクライアントの間、およびそれを含むクライアントと無害なクライアントの間には強い相関があります。
このヘッダーを送信しない特定のボット(たとえば、Pingdom、HostTracker、UpDowner、magpie-crawler、Yandex、Yodao、MJ12、GigaBot、LinkedInBot)は、このヘッダーを送信しませんが、これを組み合わせるとChrome、Firefox、IE、Safari、Operaなどの「通常の」ユーザーエージェントに一致するルールを使用すると、これらのボットのブロックを回避できます。
accept:
ヘッダー(および他のほとんどのヘッダーは小文字)を送信するクライアント(またはヘッダーを変更するプロキシ)がいくつかあります。私はまだこれらが悪意のあるものであるかどうかを判別できていませんが、すべて「Firefox/3.6.8」であると主張し、以下を持っています:
Via:HTTP/1.1 silk
X-Forwarded-For:10.161.106.98
または、ヘッダー内のその他の10.x.x.x IPアドレス...不審です。
RFC 2616には、すべての要求にAcceptヘッダーが存在する必要があると記載されています。これは絶対的な要件ではないため、このヘッダーを送信しない場合でも、ユーザーエージェントは条件付きで(RFCで定義されているように)準拠しています。
Acceptヘッダーなしでリクエストを拒否する理由は、すべての通常のWebブラウザーはヘッダーを送信しますが、多くのボットは送信しないということです。しかし実際には、何百万ものリクエストを見た後、一部の「良い」ボットはAcceptヘッダーも送信しません。したがって、このルールは完全ではなく、誤検知を生成します。