web-dev-qa-db-ja.com

PDF悪意のあるコードの挿入に対して脆弱なサービスを作成していますか?

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を検出します

4
Aditya Cherla

私は主に.NETで多くのPDFライブラリではありませんが、正確にはこれで問題ありません。クライアント側のHTMLをサーバーに送り返すことを心配している場合は、それが操作された場合、考えられる提案は、特にPDFライブラリを使用するために、バックエンドで別個のHTMLバージョンをレンダリングすることです。したがって、これはクライアントにレンダリングされず、クライアント操作。

4
ISMSDEV
  1. WebサービスがXSSインジェクションの影響を受けないことを確認してください。

  2. 悪用を防ぐ方法を見つける必要があります(これがWebサービスになるため)。 APIキーコントロールを使用して、悪意のあるJavaScriptを含むHTMLファイルがPDFジェネレーターにアップロードされるのを防ぎます。

4
mootmoot

問題のライブラリのソース全体と他のすべての場所を確認せずにPDFを使用してそのコンテンツを評価することができます(コンテンツを解析したり、OCRを実行する他のサービスにアップロードしたりするなど)。 、知る方法は本当にありません。

ここで重要なのは、このライブラリを信頼しているかどうかに関係なく、ユーザー入力を受け取ったらすぐにサニタイズする必要があることです。開発者としてのあなたの目標は、「信頼できない人から爆発の可能性がある文字列が提供された場合、安全に処理できたとしても、それを知らない人が誤って爆発させる前に、それを拒否する必要がある」ということです。

誰かが、悪意のある文字列または顧客のPDFリーダーを喜んで評価するデータ処理パイプラインの別のツールである可能性があります。いずれにせよ、それは手に負えないものです。

文字列をエスケープする! ユーザー入力をサニタイズする方法はたくさんあります。私はJava=の専門家ではないので、それらすべてを知っているわけではありませんが、それがあなたの日常の仕事なら、確かにそうすべきです。

3
Ivan