Local file security
Local file securityとは、`file://`プロトコルを使用してローカルファイルシステムから直接PDFファイルを開いた際に、Webアプリケーションによるリクエストを制限するブラウザによるセキュリティ制約を指します。
Local file securityとは、file://プロトコルを使用してローカルファイルシステムから直接PDFファイルを開いた際に、Webアプリケーションによるリクエストを制限するブラウザによるセキュリティ制約を指します。これらのセキュリティ対策は、悪意のあるローカルファイルがネットワークリソースや他のローカルファイルにアクセスすることを防ぐために、現代のWebブラウザに実装されています。
(
Citation: N.A., 2020
(N.A.).
(2020).
Document management — Portable document format — Part 2: PDF 2.0
.
International Organization for Standardization
Retrieved from
https://www.iso.org/standard/75839.html
)
などのPDF仕様では直接言及されていませんが、local file securityはPDF.jsやその他のブラウザベースのPDFビューアがローカルファイルを扱う際の動作に大きな影響を与えます。
Local file securityは、ブラウザレベルのセキュリティポリシーであり、一般的にローカルファイルに対するSame-Origin Policy(SOP)として知られています。これは、file:// URLから実行されるJavaScriptがXMLHttpRequest(AJAX)呼び出しを行ったり、特定のブラウザAPIにアクセスしたりすることを制限します。ユーザーがハードドライブから直接ブラウザでPDFファイルを開くと、そのファイルはhttp://やhttps://のURLではなく、file://プロトコルのURLで読み込まれます。このような状況下では、ブラウザはHTTP/HTTPS経由で提供されるファイルに対してよりも厳格なセキュリティ制約を課します。これらの制限により、ローカルのHTML/JavaScriptが追加のリソースを取得したり、クロスオリジンリクエストを行ったり、Web Workersにアクセスしたりすることができなくなります。これらはすべて、PDF.jsのような現代のPDFビューアが複雑なPDFドキュメントを解析およびレンダリングするために通常必要とする機能です。これは異なるドメインからのHTTP/HTTPSリソースに適用されるCORS(Cross-Origin Resource Sharing)制限とは異なり、local file securityは特にファイルシステムプロトコル経由で読み込まれたファイルへのアクセスを制御します。
ブラウザベースのPDFレンダリングライブラリを扱う開発者にとって、local file securityは重要な実務上の課題となります。最も広く使用されているJavaScript PDFビューアであるPDF.jsは、PDFリソースの読み込み、( ( Citation: PDF Association, 2023 PDF Association(2023). Retrieved from https://pdfa.org/resource/tagged-pdf-best-practice-guide-syntax/ ) で説明されているタグ付きコンテンツ構造を含む)ドキュメント構造の解析、およびページの効率的なレンダリングのために、AJAX呼び出しとWeb Workersに大きく依存しています。Local file securityの制限が有効な場合、これらの重要な操作は失敗し、機能が破損したり、PDFを完全に表示できなくなったりします。開発者は、開発およびテスト中にユーザーにローカルWebサーバーを実行するよう指示するか、セキュリティ制限を回避するためのブラウザフラグを設定する(本番環境では推奨されません)か、PDFが常にHTTP/HTTPSプロトコル経由で提供されるようにする必要があります。この考慮事項は、 ( Citation: N.A., 2014 (N.A.). (2014). Document management applications — Electronic document file format enhancement for accessibility — Part 1: Use of ISO 32000-1 (PDF/UA-1) . International Organization for Standardization Retrieved from https://www.iso.org/standard/64599.html ) などの標準に準拠したアクセシブルなPDFを表示する必要があるアプリケーションを構築する際に特に重要です。アクセシビリティ機能の解析には、ドキュメント構造への完全なアクセスが必要となるためです。
ブラウザがfile://プロトコルを使用してファイルを読み込む際、ネットワークリソースや他のローカルファイルからファイルを隔離する制限的なセキュリティコンテキストを適用します。ブラウザのセキュリティモデルは、各ローカルファイルを固有のオリジンとして扱い、ファイル間の通信を防ぎます。HTMLファイル内のJavaScriptコードが、追加のリソース(PDFページコンテンツ、フォント、画像など)を読み込むためにXMLHttpRequestオブジェクトまたはfetch API呼び出しを作成しようとすると、ブラウザはリクエストをブロックし、通常はセキュリティ例外をスローします。同様に、PDF.jsがPDF解析タスクのバックグラウンド処理に使用するWeb Workersのインスタンス化の試みもブロックされます。これは、Workerが同一オリジンリクエスト経由でスクリプトを読み込む必要があるためです。実行レベルはブラウザによって異なります。ChromeとEdgeは特に厳格で、Firefoxは特定の設定で一部のローカルファイルアクセスを許可し、Safariには独自の実装上のニュアンスがあります。開発者は、ローカル開発サーバーを実行する(Pythonのhttp.server、Node.jsのhttp-serverなどのツールを使用)ことで、これらの制限を回避できます。これにより、http://localhost経由でファイルが提供され、AJAXリクエストとWorkerのインスタンス化を許可する適切なオリジンが確立されます。
- AJAX(Asynchronous JavaScript and XML)– ページのリフレッシュなしでデータを読み込むために、WebアプリケーションからHTTPリクエストを非同期で行う技術
- Same-Origin Policy – あるオリジンのドキュメントまたはスクリプトが別のオリジンのリソースとどのように相互作用できるかを制限するブラウザのセキュリティメカニズム
- CORS(Cross-Origin Resource Sharing)– サーバーがどのオリジンが自身のリソースにアクセスできるかを指定できるHTTPヘッダーベースのメカニズム
- Web Workers – バックグラウンドスレッドでスクリプトを実行するためのJavaScript API。通常、local file securityの制限によってブロックされる
- Tagged PDF – アクセシビリティのためのセマンティック情報を含むPDF構造フォーマット。local file securityの影響を受ける可能性のある完全なドキュメント解析が必要
- (N.A.) (2020)
- (N.A.). (2020). Document management — Portable document format — Part 2: PDF 2.0 . International Organization for Standardization Retrieved from https://www.iso.org/standard/75839.html
- PDF Association (2023)
- PDF Association(2023). Retrieved from https://pdfa.org/resource/tagged-pdf-best-practice-guide-syntax/
- (N.A.) (2014)
- (N.A.). (2014). Document management applications — Electronic document file format enhancement for accessibility — Part 1: Use of ISO 32000-1 (PDF/UA-1) . International Organization for Standardization Retrieved from https://www.iso.org/standard/64599.html
