
.NET ドキュメントビューアのエンタープライズアプリにおけるセキュリティ考慮事項
はじめに

.NET‑based のドキュメントビューアを構築する際は、最初からセキュリティを意識しなければなりません。エンタープライズ .NET アプリにビューアを埋め込むときの最大の課題は、コンテンツを機密に保ちつつ、ユーザーにリッチでインタラクティブな体験を提供する方法です。DMS、顧客ポータル、法務ワークフローのいずれを構築する場合でも、知的財産、個人情報、そして規制で求められる情報を閲覧パイプラインのすべての段階で保護する必要があります。本稿ではシニア開発者とアーキテクト向けに、最も一般的な攻撃ベクトル、リスクを低減するアーキテクチャ上の選択肢、そして Doconut のユニバーサルドキュメントビューアがどのように安全な基盤として設計されているかを解説します。
1. 埋め込みビューアの脅威領域
美しく作られた UI でも、ビューアがデータを漏洩したり信頼できないコードを実行したりすれば攻撃対象になります。以下は主に遭遇する 3 つの脅威カテゴリです。
| 脅威 | 典型的な現れ方 | ビジネスへの影響 |
|---|---|---|
| データ流出 | 直接ダウンロードリンク、保護されていない API、またはクライアント側レンダリングで生バイトがブラウザへ送られるケース | 機密契約の漏洩、個人情報の侵害、規制罰金 |
| クロスサイトスクリプティング (XSS) とインジェクション | PDF や Office ファイル内の悪意あるマークアップがレンダリング時にスクリプト実行を引き起こす | セッションハイジャック、認証情報の窃取、ランサムウェアへの転用 |
| 不正な改ざん | ユーザーが注釈を追加・変更し、監査トレイルなしで改変ファイルをエクスポートする | 法的紛争、偽造記録、コンプライアンス違反 |
ビューアは PDF、DOCX、DWG など複雑なフォーマットを扱い、注釈 や OCR といった機能を提供するため、コードパスが増大し攻撃面も広がります。最初の防御ラインは何か? 信頼できるサーバー側処理 と 制御されたクライアント側インタラクション を明確に分離することです。
2. .NET におけるサーバー側とクライアント側のレンダリング比較
なぜサーバー側が重要か
- データ露出ゼロ – 生ファイルは信頼できるバックエンドから決して外部に出ません。レンダリングされた画像または安全な HTML フラグメントだけがブラウザへ送られます。
- 一元的なポリシー適用 – 暗号化、赤字処理、視覚的マーキングは、ドキュメントがユーザーに届く前に一元的に適用できます。
- スケーラブルな分離 – 重い変換(例: CAD DWG をラスタ画像に変換)を分離されたバックグラウンドジョブで実行し、侵害されたリクエストの影響範囲を最小化します。
クライアント側が許容されるケース
- 低感度のプレビュー(公開パンフレットなど)で、レイテンシが最重要なケース。
- インフラ全体がエアギャップ化され、クライアントが信頼できる社内デバイス上で動作する環境。
Doconut のバランスの取れたアーキテクチャ
Doconut は重い変換、OCR、注釈の準備を サーバー側 で行い、軽量な HTML5 ベースのビューア を任意のモダンブラウザで提供します。ビューアはサードパーティプラグインを必要とせず、すべてのレンダリングはサーバー側 Viewer コンポーネントから生成されたストリームから行われます。この設計により、多くの脆弱なソリューションが採用する「元ファイルをダウンロードさせる」パターンを排除できます。
ASP.NET Core パイプラインへの Doconut 登録方法
コードスニペットの代わりに、Doconut の画像エンドポイント(例: DocImage.axd)へのリクエストをインターセプトし、Doconut のレンダリングエンジンへルーティングするミドルウェアコンポーネントを追加するイメージです。ミドルウェアは既存の認証/認可ロジックと連携して各リクエストを検証し、条件を満たさない場合は画像ストリームの送信を拒否します。これにより、セキュリティ基準を満たしたドキュメントだけがレンダリングされます。
3. アクセス、認証、認可の制御
アクセス制御戦略
静的なファイルパスや公開 URL を露出させるのではなく、Doconut を既存の ID プロバイダーと統合します。ユーザーがドキュメントを要求した際、サーバー側コードは以下を実行すべきです。
- 標準の ASP.NET Core 認証パイプラインでユーザーの ID とロールを検証する。
- 追加のビジネスロジックチェック(例: ユーザーが正しい部門に所属しているか、特定のクレームを持っているか)を実施する。
- チェックが通れば、Doconut のビューアを呼び出して 安全なストリーム を生成し、要求されたドキュメントページを返す。ストリームは現在の HTTP リクエストに紐付けられ、セッション終了後に再利用できません。
注釈権限
Doconut の Annotation Plugin はページ単位で動作します。ユーザー権限が確認された後、サーバーは対象ページ用に AnnotationManager を作成します。ユーザーに CanAnnotate などの適切なクレームが無い場合、サーバーは読み取り専用ビューを返し、注釈変更の POST は 403 応答で拒否されます。これにより、権限を持つ担当者だけがレビューコメントを追加・変更できます。
4. データ漏洩防止:暗号化、視覚的マーキング、印刷制御
エンドツーエンド暗号化
Doconut が扱うすべてのドキュメントストリームは HTTPS 経由で送信され、Azure Blob、SQL Transparent Data Encryption など選択したストレージプロバイダーで暗号化された状態で保存されます。ビューアはラスタ化されたページのみを受け取り、元ファイルへの直接アクセスはクライアントに与えません。
注釈による視覚的マーキング(透かし)
サーバー側でレンダリングを行うため、ページがブラウザへ送られる前にユーザー固有の注釈(例: 半透明テキストで「閲覧者: ○○、メール: xxx、日時: yyyy-mm-dd」)を付与できます。この手法はスクリーンショットの抑止と、情報漏洩が発生した際の法医学的証拠提供に有効で、Doconut の検証済み注釈機能の範囲内で実装できます。
印刷制御
多くの企業は「許可されたデバイスでのみ印刷」または「印刷部数を制限」する要件を持ちます。Doconut の Controlled Printing 機能はサーバー側で印刷コマンドを捕捉し、ユーザーのロールを検証したうえで、生成された PDF に「Printed on」ノートを埋め込むことが可能です。印刷ジョブはサーバー側で作成されるため、クライアントがマーキングなしのバージョンを受け取ることはありません。
5. OCR と注釈の監査、ロギング、コンプライアンス
不変監査トレイル
注釈の追加・変更・削除の各操作は XML ペイロードとして生成され、Azure Append Blob や不変テーブルなどのイミュータブルログに保存できます。Doconut の GetAnnotationXml() メソッドは変更後の正確な状態を返すため、タイムスタンプとユーザー ID と共に XML を永続化すれば、誰が、いつ、何を、どのように操作したか を完全に再現できます。
安全な OCR 処理
OCR は検索可能な PDF に必須ですが、クライアントに生テキストを露出させるリスクがあります。Doconut は OCR を サーバー側 で実行し、検索インデックスデータのみを返します。元のスキャン画像は暗号化されたままで、検索テキストは 読み取り専用 キャッシュに格納され、ビューアの他のリクエストと同様のライフサイクル制御が適用されます。
規制への適合
すべての処理がオンプレミス(またはプライベートクラウド)で完結するため、Doconut は GDPR、HIPAA、PCI‑DSS など、保護データを外部 SaaS エンドポイントへ送信することを禁じる規制要件を満たします。さらに、監査対応ログを標準で提供するため、財務・法務・医療部門のコンプライアンス報告が格段に楽になります。
6. Doconut がセキュリティ要件を競争優位に変える方法
| セキュリティ要件 | Doconut 機能 | ビジネス上の利点 |
|---|---|---|
| データ流出ゼロ | サーバー側変換 & ストリームベースレンダリング | 機密ファイルが信頼できる環境から決して外部に出ません。 |
| XSS 防止 | サニタイズされた HTML 出力、ドキュメントからのクライアント側スクリプト実行なし | 余計なコーディング作業なしで攻撃面を削減。 |
| 粒度の細かい権限付与 | クレーム対応ミドルウェア、ページ単位の注釈マネージャー | 既存の RBAC モデルと統合し、管理負荷を低減。 |
| 印刷制御と視覚的マーキング | 注釈ベースのオーバーレイ付き印刷ワークフロー | データ漏洩を抑止し、法医学的追跡性を提供。 |
| 監査可能性 | GetAnnotationXml()、リクエストスコープストリーム、サーバーログ | 金融・法務・医療部門のコンプライアンス報告を簡素化。 |
| スケーラブル OCR | サーバー側 OCR プラグイン、JSON 形式の検索インデックス返却 | 生テキストを露出せずに数百万ページの即時検索を実現。 |
| クロスプラットフォーム配信 | 任意のブラウザで動作する HTML5 ビューア、React・Angular・Vue・Blazor と統合可能 | デスクトップ、モバイル、キオスクなど多様なデバイスに将来性を確保。 |
サーバー側で重い処理を担うことで、Doconut は ビジネスロジック(例: 多段階承認ワークフローやエンジニアリング図の安全なポータル公開)に集中できる環境を提供します。同一コードベースは .NET 6、.NET Core、最新の .NET 8 すべてで動作し、ベンダーロックインの心配もありません。
実際に試してみてください – Doconut は 無料トライアル を提供しており、ビューア、注釈、OCR、変換プラグインがすべて含まれます。数分でサンプル ASP.NET Core アプリを起動し、セキュリティモデルを実際に体感してください。
主なポイント
- サーバー側レンダリングとストリーム配信 により、古いリンク攻撃を排除し、生ファイルは信頼できる境界内に留まります。
- 中央集権的ポリシー適用(暗号化、赤字処理、注釈ベースのマーキング)はクライアントにデータが届く前に実施されます。
- 細粒度のクレームチェック により、ドキュメントのオープンや注釈機能の有効化が企業の RBAC ポリシーと完全に合致します。
- 印刷制御 と注釈ベースのオーバーレイはデータ漏洩を抑止し、法医学的証拠を提供します。
GetAnnotationXml()が生成する不変監査ログ は規制報告をシンプルにします。- HTML5 ビューア はあらゆるモダンブラウザで動作し、React、Angular、Vue、Blazor との統合が容易です。
- Doconut の無料トライアル でセキュリティ、パフォーマンス、開発者体験を本番導入前に検証できます。
よくある質問
Q1: Doconut を使用して Word や Excel の変換を行う際、サーバーに Microsoft Office をインストールする必要がありますか?
A: いいえ。Doconut の Converter Plugin はサーバー上で Office → PDF などの変換をすべて実行し、ローカルに Office がインストールされている必要はありません。
Q2: エアギャップ環境でも Doconut を利用できますか?
A: はい。Doconut はドキュメントを完全にオンプレミスで処理し、外部 SaaS サービスに依存しないため、隔離されたネットワークでも問題なく動作します。
Q3: 大容量ファイルはどのように処理されますか?
A: Doconut はページ単位でストリーミングし、必要な部分だけをメモリにロードします。このページング方式はバックグラウンドジョブや大規模ワークロードに適しています。
Q4: ビューアは障害者向けのアクセシビリティに対応していますか?
A: HTML5 ビューアは標準的なアクセシビリティプラクティスに従って設計されており、ARIA 属性を追加することで WCAG ガイドラインにも対応可能です。
Q5:無料トライアルはどこで入手できますか?
A: 公式 Doconut サイト (https://doconut.com) にアクセスし、トライアルライセンスをリクエストしてください。トライアルにはビューア、注釈、OCR、変換のすべてのコアプラグインが含まれます。