HTMLで表形式で表示されているレポートがWebアプリケーションにあります。このレポートには、PDF download as PDF
ボタン。問題は、このPDFダウンロード条項が実装されている方法についてです。生のHTML文字列をダウンロード可能なPDFに変換するバックエンドサービスを作成するように言われています。HTMLを=に変換するにはPDF Javaの The Flying Saucer ライブラリを使用しています。これが機能すると想定される方法は、次のような文字列として生のHTMLコンテンツを取得することです。
<table id="new-table">
<thead>
<tr>
<th class="model">Column 1</th>
<th class="description">Column 2</th>
<th class="quantity">Column-3</th>
<th class="listDollars">Column-4</th>
<th class="payout">Column-5</th>
</thead>
<tbody>
<tr id="row-H2285" style="background: #FFFFFF;" class="modelRow">
<td class="model">H2285</td>
<td class="description">F125</td>
<td>16</td>
<td class="list"></td>
<td class="Percent">... and so on
リクエストパラメータのフロントエンドから、フライングソーサーを使用してこのHTML文字列を変換し、PDFファイルを返す必要があります。私の質問は、攻撃者が悪意のあるコードを挿入する方法があるかということです。このHTMLコンテンツ内でバックエンドサービスに送信しますか?PDFファイルを開く人に害を及ぼす可能性があるのはどれですか?
空飛ぶ円盤ライブラリのセキュリティ問題をグーグル検索しましたが、何も見つかりませんでした。しかし、私はこのサイト自体からこの質問を見つけました PDFまたはjpegに悪意のあるコードを挿入する方法 そして別の問題があります PDFで悪意のあるJavaScriptを検出します
私は主に.NETで多くのPDFライブラリではありませんが、正確にはこれで問題ありません。クライアント側のHTMLをサーバーに送り返すことを心配している場合は、それが操作された場合、考えられる提案は、特にPDFライブラリを使用するために、バックエンドで別個のHTMLバージョンをレンダリングすることです。したがって、これはクライアントにレンダリングされず、クライアント操作。
WebサービスがXSSインジェクションの影響を受けないことを確認してください。
悪用を防ぐ方法を見つける必要があります(これがWebサービスになるため)。 APIキーコントロールを使用して、悪意のあるJavaScriptを含むHTMLファイルがPDFジェネレーターにアップロードされるのを防ぎます。
問題のライブラリのソース全体と他のすべての場所を確認せずにPDFを使用してそのコンテンツを評価することができます(コンテンツを解析したり、OCRを実行する他のサービスにアップロードしたりするなど)。 、知る方法は本当にありません。
ここで重要なのは、このライブラリを信頼しているかどうかに関係なく、ユーザー入力を受け取ったらすぐにサニタイズする必要があることです。開発者としてのあなたの目標は、「信頼できない人から爆発の可能性がある文字列が提供された場合、安全に処理できたとしても、それを知らない人が誤って爆発させる前に、それを拒否する必要がある」ということです。
誰かが、悪意のある文字列または顧客のPDFリーダーを喜んで評価するデータ処理パイプラインの別のツールである可能性があります。いずれにせよ、それは手に負えないものです。
文字列をエスケープする! ユーザー入力をサニタイズする方法はたくさんあります。私はJava=の専門家ではないので、それらすべてを知っているわけではありませんが、それがあなたの日常の仕事なら、確かにそうすべきです。