質問
この可能性のあるエクスプロイトを処理しようとしていて、それを行うための最善の方法は何だと思いますか? Apacheのcommon-validatorを使用して、既知の許可されたシンボルのリストを作成し、それを使用する必要がありますか?
解決
ウィキペディアの記事から:
一般的な解決策は、LocationやSet-CookieなどのHTTPヘッダーに含める前に文字列をURLエンコードすることです。
サニタイズの典型的な例には、整数へのキャスト、または積極的な正規表現の置換が含まれます。これはPHP固有の問題ではありませんが、バージョン4.4.2および5.1.2以降、PHPインタープリターにはこの攻撃に対する保護が含まれていることに注意してください。
編集
Javaアクションでjspを使用することに縛られています!
この攻撃ベクトルに対するJSPベースの保護は存在しないようです。Web上の多くの説明ではaspまたはphpを想定していますが、このリンクは、問題にアプローチするためのかなりプラットフォームに依存しない方法を説明しています(jspは付随的な例として使用されています)。
基本的に、最初のステップは、潜在的に危険な文字(CR、LFなど)を特定してから削除することです。私はあなたが期待できるほど堅牢なソリューションについてこれを恐れています!
ソリューション
入力を検証します。特にCookieを設定してリダイレクトする場合は、HTTP応答ヘッダーにデータを埋め込む前に、CRとLF(および他のすべての危険な文字)を削除してください。サードパーティ製品を使用してCR / LFインジェクションを防ぎ、アプリケーションの展開前にそのようなセキュリティホールの存在をテストすることができます。
他のヒント
PHPを使用? ;)
ウィキペディアとPHP CHANGELOGによると、PHPは4.4.2以降のPHP4および5.1.2以降のPHP5で保護されていました。
スキミングしただけですが、これが役立つ場合があります。彼の例はJSPで書かれています。
OK、文字列の読み取りにはintへの適切なキャストはあまり使用されません。また、ブラウザからの入力を受信するすべてのアクションで正規表現を使用するのは面倒で、より堅牢なソリューションを探しています