問題
クラウドシステムのDocuWare Platformに対するHTTPリクエストで、ステータスコード403 - Forbiddenが 返され、「Request blocked by DocuWare firewall」という応答メッセージが表示される。
例
curl https://{{url}}/docuware/platform/Organizations -H "Authorization:H "Authorization: Bearer {{AccessToken}}"-H "Accept: application/jsonr
403 - DocuWareファイアウォールによってブロックされたリクエスト
根本的な原因
この動作は、DocuWareファイアウォールがリクエスト分割攻撃を含む可能性のあるリクエストを拒否するために発生します。この動作は、1つ以上のリクエストヘッダが複数行の文字列を送信するためにCRLFを使用していることが原因で発生する可能性があります。
.NET/ApplicationsInsights:ほとんどの場合、.NET / App Insightsスタイルのインスツルメンテーションは、レガシー分散トレーシングヘッダを追加しています。古い.NET/App Insightsスタックは、非標準の Correlation-Context ヘッダーで 荷物を伝播します 。そのヘッダーのキー/値はURLエンコードされています。 0D%0 AはCRLFをURLエンコードした値で、多くのWAF/ファイアウォールがRequest-splittingとしてフラグを立て、ブロックします。
あなたが目にしている特定のキーは、 traceStartInfoである可能性が高い 。(これはマイクロソフト側の診断コンセプトです。.NETのトレースコードパスで同じ名前を見ることができます)。
- レガシー.NETプロパゲータ(およびそれに依存する古いApplication Insights SDK)は、アプリケーションの荷物を Correlation-Context リクエストヘッダに書き込みます(例: Correlation-Context: name1=value1,name2=value2... 、URLエンコードされた値)。値がCR/LFを含む場合、それは %0D%0Aとなり、DocuWareファイアウォールは不審なものとして扱う。
- 今日の業界標準は、W3C Trace Context + W3C Baggageです。つまり、 traceparent/tracestateを介してトレースを伝播 し、別の Baggage ヘッダー( Correlation-Context ではない )でBaggageを送信します 。新しい.NETバージョンのデフォルトは、その方向に移動しました。
- .NET 10からは、デフォルトのプロパゲータはW3Cです( Correlation-Contextではなく、 baggageを使用 します)。まだ Correlation-Contextが表示さ れる場合は、古いランタイムを使用しているか、古いインスツルメンテーションを使用しているか、明示的にレガシープロパゲータをオプトインしている可能性があります。
Correlation-Context httpヘッダーの詳細については、 https://github.com/AloisReitbauer/distributed-tracing/blob/master/correlation_context/HTTP_HEADER_FORMAT.md。
一般的な解決策
HTTPヘッダーのすべてのCRLF値を避けることで、すべてのHTTPヘッダーの複数行文字列を許可しないようにします。
.NETの解決策A:Correlation-Contextの発行を停止し、W3Cに切り替える。
デフォルトがW3Cプロパゲーターになるように、ランタイム/インストゥルメントをアップグレードするか、アプリの起動時に明示的に設定する。これにより、 Baggage ヘッダーを 経由してBaggageが流れ 、 traceparent/tracestateを 経由してトレースが行われるように なり、従来の Correlation-Context ヘッダーが なくなります 。
OpenTelemetryや Azure Monitor の OTel distro で計測している場合は、W3C のプロパゲータ(TraceContext + Baggage)だけを保持します。これで 、Correlation-Contextを 完全に回避できる 。
詳細については、こちらを参照してください。
.NETソリューションB:レガシーな実装は維持するが、バゲージに入れるものはサニタイズする
互換性のためにCorrelation-Contextを維持しなければならない場合は、手荷物の値にCRやLFを追加しないようにしてください。 Activity.Current?.AddBaggage("traceStartInfo", ...)のようなコードを検索してください。 また、複数行の文字列は避けてください。
.NET ソリューション C: ヘッダー値から複数行の文字列を削除する。
すべてのヘッダをサニタイズして、HTTPヘッダの値からCR︲LFを削除してください。
アプリケーション・インサイト JS ソリューション:
ヘッダーが Application Insights JS SDK 経由でブラウザから発信された場合、相関ヘッダーまたは相関ヘッダーが追加されるスコープを一時的に無効にできます。SDKは、相関ヘッダーを追加するかどうかを決定します。これらの設定を制御することで、特定のオリジンに対して問題のあるヘッダーが発行されるのを防ぐことができます。
new ApplicationInsights({
config:{
// ..
disableCorrelationHeaders: true
}
});
