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

.NET ベースのドキュメントビューアを構築するということは、最初からセキュリティを考慮しなければならないことを意味します。エンタープライズ .NET アプリにビューアを埋め込む際に最も重要な問いは、コンテンツを機密に保ちつつ、ユーザーにリッチでインタラクティブな体験を提供する方法です。DMS、顧客ポータル、あるいはリーガルテックのワークフローを構築する場合でも、知的財産、個人データ、そして規制で求められる情報を閲覧パイプラインのすべての段階で保護する必要があります。本稿では、シニア開発者やアーキテクト向けに、最も一般的な攻撃ベクトル、リスクを低減するアーキテクチャ上の選択肢、そして Doconut のユニバーサルドキュメントビューアがあらゆるドキュメント中心の .NET ソリューションに対して安全な基盤として構築されている理由を解説します。
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 を既存のアイデンティティプロバイダーと統合します。ユーザーがドキュメントを要求したとき、サーバー側コードは次のことを行うべきです:
- 標準の ASP.NET Core 認証パイプラインを使用して、ユーザーの身元とロールを検証します。
- 追加のビジネスロジックチェックを実行します(例: ユーザーが正しい部門に所属しているか、特定のクレームを持っているかを確認)。
- チェックが通過したら、Doconut のビューアを呼び出して、要求されたドキュメントページの 安全なストリーム を生成します。ストリームは現在の HTTP リクエストに紐付けられるため、セッションが終了した後に再利用することはできません。
アノテーション権限
Doconut の Annotation Plugin はページ単位で機能します。ユーザーの権限が確認された後、サーバーは要求されたページのために AnnotationManager を作成します。ユーザーが適切なクレーム(例: CanAnnotate)を持っていない場合、サーバーは読み取り専用ビューを返し、アノテーション変更の投稿は 403 応答で拒否されます。これにより、権限のある担当者だけがレビューコメントを追加または変更できるようになります。
4. データ漏洩防止: 暗号化、ビジュアルマーキング、印刷制御
エンドツーエンド暗号化
Doconut が処理するすべてのドキュメントストリームは HTTPS 経由で送信され、選択したストレージプロバイダー(Azure Blob、SQL Transparent Data Encryption など)を使用して保存時に暗号化されます。ビューアはラスタライズされたページのみを受け取り、元のファイルは決して受け取らないため、クライアントがソースドキュメントに直接アクセスすることはありません。
アノテーションによるビジュアルマーキング(ウォーターマーク)
レンダリングがサーバー側で実行されるため、ページがブラウザーに送信される前に、ビューアの名前、メールアドレス、タイムスタンプを含む半透明のテキストオーバーレイなど、ユーザー固有のアノテーションを追加できます。このアプローチはスクリーンショットを抑止し、漏洩が発生した場合の法医学的証拠を提供します。また、Doconut の検証済みアノテーション機能の範囲内で実現できます。
印刷制御
多くの企業では、ドキュメントを 認可されたデバイスのみ、または コピー数を制限して 印刷できることが求められます。Doconut の Controlled Printing 機能により、サーバー側で印刷コマンドをインターセプトし、ユーザーのロールを検証し、必要に応じて生成された PDF に「Printed on」注記を埋め込むことができます。印刷ジョブはサーバー側で作成されるため、クライアントはマーキングされていないバージョンのドキュメントを受け取ることはありません。
5. OCR とアノテーションの監査、ロギング、コンプライアンス
不変の監査トレイル
すべてのアノテーション操作(追加、変更、削除)は XML ペイロードを生成し、これを不変のログ(例: Azure Append Blob または不変のデータベーステーブル)に保存できます。Doconut の GetAnnotationXml() メソッドは各変更後の正確な状態を返すため、XML をタイムスタンプとユーザー識別子と共に永続化できます。リクエストレベルのセキュリティチェックと組み合わせることで、誰が何を、いつ、どのように操作したか を再構築できます。
安全な OCR 処理
OCR は検索可能な PDF に不可欠ですが、リスクも伴います。OCR エンジンが誤って生テキストをクライアントに露出させる可能性があります。Doconut は OCR を サーバー側 で実行し、検索インデックスデータのみを返します。元のスキャン画像は暗号化されたままで、検索可能なテキストは 読み取り専用 キャッシュに格納され、ビューアの他の部分と同じリクエストライフサイクル規則に従います。
規制遵守の整合性
すべての処理がオンプレミス(または管理下のプライベートクラウド)で行われるため、Doconut は保護されたデータをサードパーティの SaaS エンドポイントに送信することを禁じる GDPR、HIPAA、PCI‑DSS の要件を満たすのに役立ちます。製品のアーキテクチャは audit‑ready logs もサポートしており、コンプライアンスレポートの作成が格段に楽になります。
6. Doconut がセキュリティ要件を競争優位に変える方法
| セキュリティ要件 | Doconut の機能 | ビジネス上のメリット |
|---|---|---|
| データの持ち出しゼロ | サーバー側変換とストリームベースのレンダリング | 機密ファイルは信頼された環境から決して外部に出ません。 |
| XSS 保護 | サニタイズされた HTML 出力、ドキュメントからのクライアント側スクリプト実行なし | 余分なコーディング作業なしで攻撃対象領域を削減します。 |
| 細粒度の権限強制 | クレーム対応ミドルウェア、ページ単位のアノテーションマネージャ | 既存の RBAC モデルと整合し、管理負荷を軽減します。 |
| 印刷制御とビジュアルマーキング | アノテーションベースのオーバーレイを使用した組み込み印刷ワークフロー | データ漏洩を抑止し、法医学的な追跡可能性を提供します。 |
| 監査可能性 | GetAnnotationXml()、リクエストスコープのストリーム、サーバーログ | 金融、法務、医療分野のコンプライアンス報告を簡素化します。 |
| スケーラブル OCR | サーバー側 OCR プラグイン、検索インデックスを JSON で返却 | 生テキストを露出させることなく、数百万ページにわたる即時検索を可能にします。 |
| クロスプラットフォーム配信 | HTML5 ビューアは任意のブラウザーで動作し、React、Angular、Vue、または Blazor と統合 | .NET 6、.NET Core、最新の .NET 8 にわたって投資を将来にわたって保護し、ベンダーロックインのない体験を提供します。 |
サーバー側で重い処理を行うことで、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をインストールすることなく、サーバー上でOfficeからPDFへの変換やその他のフォーマット変換をすべて実行します。
Q2: Doconutをエアギャップ環境で使用できますか?
A: はい。Doconutはドキュメントを完全にオンプレミスで処理し、外部のSaaSサービスに依存しないため、隔離されたネットワークでも動作します。
Q3: Doconutは大容量ファイルをどのように処理しますか?
A: Doconutは必要に応じてドキュメントページをストリーミングし、必要な部分だけをメモリにロードします。このページング方式はバックグラウンドジョブや大規模ワークロードに適しています。
Q4: ビューアは障害を持つユーザーにアクセシブルですか?
A: HTML5ビューアは標準的なアクセシビリティ慣行に従っており、ARIA属性を追加することでWCAGガイドラインに対応できます。
Q5: 無料トライアルはどこで入手できますか?
A: 公式のDoconutサイト(https://doconut.com)にアクセスし、トライアルライセンスをリクエストしてください。トライアルにはビューア、注釈、OCR、変換のすべてのコアプラグインが含まれます。