私は何年も前のJavaWebアプリケーションに取り組んでいます。
おそらく開発者が既存のコードを盲目的にコピーしているために<bean:write>
、JSPのほとんどのsは、必要のない場合でも持っています。はJSP変数を出力するStrutsタグであり、が指定されている場合、HTMLエスケープを実行しません(したがって、属性に似ています)。これは、これらの一部がユーザー入力を出力しているため、アプリケーションがXSS攻撃に対して脆弱であることを意味します。filter="false"
<bean:write>
filter="false"
filter="false"
<c:out>
escapeXml="false"
<bean:write filter="false">
filter="false"
アプリケーションでユーザーがTinyMCEテキスト領域を使用してHTMLを入力できる場合があるため、を包括的に削除することはできません。そのため、ユーザーが入力したフォーマットを保持するために、生のHTMLを出力する必要がある場合もあります(ただし、スクリプトを削除するために、ユーザーが入力したHTMLをサニタイズします)。
コードには数千のがfilter="false"
含まれているため、必要かどうかを判断するための各監査には時間がかかりすぎます。
私たちが考えているのは、独自のバージョンのbean:write
タグをsecure:write
作成し、JSPでbean:writeをsecure:writeにグローバルに検索/置換することです。secure:write
が指定されている場合、出力からスクリプトを削除しfilter="false"
ます。この変更後も、ユーザーはフォーマットHTMLを実際には出力できない場所に出力させることができますが、XSSの脆弱性が修正されている限り、当面はそれについて心配する必要はありません。
secure:write
ライブラリを使用してタグにスクリプトストリッピングを実装したいと考えています。https://www.owasp.org/index.php/Category:OWASP_AntiSamy_Projectとhttps://code.google.com/を確認しています。 p /owasp-java-html-sanitizer/。どちらもHTMLをサニタイズできるように見えますが、AntiSamyは、アプリケーションへの途中ではなく、アプリケーションへの途中でHTMLをサニタイズするために使用されるように見えます。また、データは入力よりも頻繁に出力されるため、すべてのsecure:write
出力の実行が遅くなる可能性があることを懸念していました。
私は2つの主な質問があります:
1)提案されたアプローチは、によって引き起こされたXSSの脆弱性を修正するために機能しfilter="false"
ますか?
2)コンテンツを表示するときにHTMLサニタイズに使用するライブラリを推奨できますか?つまり、ページレンダリングのパフォーマンスに大きな影響を与えないほど高速です。誰かがAntiSamyまたはowasp-java-html-sanitizerを同様の目的で使用したことがありますか?