Cloud PaperAPI

受け付ける PDF

印刷・FAX で受け付ける PDF の条件(既定で拒否)。

このページの見出し
  1. 11.2 検査 1: 構文(pdfcheck)
  2. 11.3 検査 2: PDF リーダー(PDFium)
  3. 11.4 検査 3: 突き合わせ
  4. 11.5 通るもの
  5. 11.6 取り込みの書類は別

方針は「明示的に許したものだけを通す」。印刷・FAX の PDF は、次の 3 つのすべてを通ったものだけを受け付ける。

11.2 検査 1: 構文(pdfcheck)

PDF の構文を正しく読む字句解析器で、ファイルのすべてのオブジェクトを読む。圧縮されたオブジェクトストリーム(FlateDecode)は展開して中まで見る。名前の #xx の書き換えは戻してから比べる。

  • 見出し: %PDF-1.0〜%PDF-1.7・%PDF-2.0 だけ。
  • 読めない構造は拒否: 閉じない文字列・長さの合わないストリーム・壊れた相互参照・obj/endobj の欠け・不正な # など。
  • ページ(/Type /Page)が 1 つも無ければ拒否。

拒否する名前(どこにあっても。キーでも値でも)

分類名前
スクリプト・アクションJavaScript JS Launch URI GoToR GoToE GoTo3DView SubmitForm ResetForm ImportData Hide Named Rendition OpenAction AA
フォームAcroForm XFA NeedsRendering
添付・ポートフォリオEmbeddedFile EmbeddedFiles EF FileAttachment Collection
3D・リッチメディア・動画・音声3D 3DD 3DV 3DA 3DView U3D PRC RichMedia RichMediaContent RichMediaSettings RichMediaExecute Movie Sound Screen
暗号化・利用権限Encrypt Crypt Perms UR3
危険な画像形式JBIG2Decode JBIG2Globals JPXDecode

許す圧縮方式(これ以外は拒否)

FlateDecode(Fl)・LZWDecode(LZW)・ASCIIHexDecode(AHx)・ASCII85Decode(A85)・RunLengthDecode(RL)・CCITTFaxDecode(CCF)・DCTDecode(DCT)。 オブジェクトストリームは FlateDecode か圧縮なしだけで、DecodeParms があれば拒否。

拒否する /Subtype

Text FreeText Line Square Circle Polygon PolyLine Highlight Underline Squiggly StrikeOut Stamp Caret Ink Popup FileAttachment Sound Movie Widget Screen PrinterMark TrapNet Watermark 3D Redact Projection RichMedia PS。 フォント・画像・フォームの XObject などの Subtype は通す。

注釈

  • 注釈(/Type /Annot)は リンク(/Link)だけ。
  • リンクに動作(/A)があれば、/S が GoTo(文書の中のページへ飛ぶ)だけ。ほかは拒否。

構造の上限(正しくても、超えたら拒否)

項目上限
配列・辞書の入れ子32
名前の長さ127
1 つの文字列1 MiB
1 つの辞書の項目10000
1 つの配列の要素200000
オブジェクトの総数500000
1 つのオブジェクトストリームのオブジェクト数100000
オブジェクトストリームの展開後の合計64 MiB(展開爆弾を防ぐ)
相互参照表の行数1000000

11.3 検査 2: PDF リーダー(PDFium)

PDFium(WebAssembly の中で動く)で開き、次を確かめる(raster.PageCount の analyze)。

  • 開けること。
  • 暗号化されていないこと(セキュリティハンドラーの版が -1)。
  • JavaScript の動作が 0。
  • 添付ファイルが 0。
  • フォームが無いこと(FPDF_FORMTYPE_NONE)。
  • ページが 1 以上。すべてのページで、注釈がすべてリンクであること。
  • 1 つでも該当すれば 422 pdf(「PDF を開けません」など)。PDF リーダーは 30 秒で待ちをやめる。

11.4 検査 3: 突き合わせ

  • 検査 1 が数えたページ数と、PDFium が数えたページ数が違えば拒否(解釈が食い違う PDF には、何かが隠れている)。
  • ページ数の上限・予算は、PDFium が数えたページ数で計る。
  • PC では、署名つきの指示の pages より多ければ拒否する。

11.5 通るもの

利用者が添付した PDF を帳票に綴じる場合、その PDF に上の要素があれば拒否される。

11.6 取り込みの書類は別

取り込み(受け口)の書類は、PDF・JPEG・PNG・TIFF を先頭のバイトで確かめるだけで、中身は検査しない。サーバーは中身を解釈せず、「信用しない塊」として返す。 その書類を印刷するとき(取り込み → プリンター)は、上の検査を通る。


ご不明な点はお問い合わせください。

Cloud PaperAPI

いまの機械のまま、Web アプリとつなぐ。

印刷・FAX・スキャンの取り込みは、無料プランでずっと無料(カードの登録なし)。読み取りが要るときは、OCR プランへ。


ドキュメントを見る・組み込みのご相談はお問い合わせ

Cloud Paper 利用規約 ↗