セキュリティとプライバシー
PreviewFile.devが包括的なセキュリティ機能でユーザーのファイルを保護する方法を学びます
セキュリティとプライバシー
PreviewFile.devはユーザーのファイルを保護するために一から構築されています。すべての機能はセキュリティとプライバシーを念頭に置いて設計されています。
コアセキュリティ機能
🔒 動的ウォーターマーク
機密文書を保護し、不正な共有を阻止するためのカスタムテキストウォーターマークを追加します。
- カスタムテキスト: 会社名、機密性通知、ユーザー識別子を追加
- 位置制御: 文書全体にウォーターマークをオーバーレイ
- 削除不可: ウォーターマークはプレビュー中にレンダリングされ、ファイルに保存されません
- 使用例: 法的文書、契約書、機密レポート
⏱️ 時間制限アクセス(TTL)
リンクが無期限にアクセス可能なままにならないよう、有効期限を設定します。
- 柔軟な期間: 15分から7日まで(プラン制限が適用されます)
- 自動期限切れ: TTL期限後、リンクはアクセス不能になります
- 手動クリーンアップ不要: サーバーが期限切れセッションを自動処理
- 使用例: 一時的な文書共有、時間に敏感なファイル
🚫 ダウンロード保護
プレビューアクセスを許可しながら、視聴者がファイルをダウンロードすることを防ぎます。
- プレビューのみモード: ユーザーは表示できますが、ローカルに保存できません
- 右クリック無効: 簡単なダウンロード試行を防止
- DevTools保護: 技術的回避策を防ぐ追加レイヤー
- 使用例: 機密PDF、機密プレゼンテーション、プロプライエタリ文書
🔥 ワンタイムアクセス(Burn After Reading)
一度の閲覧後に自己破壊するリンクを作成します。
- 一回限りリンク: 初回アクセス後に自動期限切れ
- 閲覧追跡: システムがリンクがアクセスされた時刻を記録
- 完全前方秘匿性: 一度閲覧されると、リンクは再利用できません
- 使用例: 高度に機密な文書、パスワードリセット、一時的な認証情報
🔗 ホットリンク保護
不正な埋め込みと帯域幅の盗用を防ぎます。
- リファラー検証: 承認されたドメインからのアクセスのみを許可
- IP/User-Agentバインディング: 特定のクライアントにセッションをバインド
- CloudFront署名付きURL: 暗号学的に安全なアクセストークン
- 使用例: CDN帯域幅の保護、配布の制御
デザインによるプライバシー
クライアントサイドレンダリング
- データ保持なし: ファイルコンテンツは一時的なリンクを超えて保存されません
- 帯域幅効率: 可能な限り直接的なクライアントからストレージへの接続
- サーバー変換: 技術的な制限により、doc/officeファイルにはサーバー側の変換が必要です
最小限のデータ収集
サービス提供に必要なもののみを収集します。
- ファイルメタデータのみ: ファイル名、サイズ、MIMEタイプ、有効期限
- コンテンツスキャンなし: ファイルコンテンツは分析やインデックス化されません
- オプションユーザーデータ: 基本使用では認証はオプションです
- 監査ログ: アクセスログはセキュリティに必要な期間のみ保持されます
セキュアストレージ統合
ファイルは業界標準のS3互換ストレージに保存されます。
- 保存時暗号化: S3サーバーサイド暗号化(SSE-S3)
- 転送時暗号化: すべての接続でHTTPS/TLS
- プライベートバケット: ストレージは公的にアクセス可能ではありません
- 署名付きURL: 時間制限付きの暗号学的に署名されたアクセストークン
コンプライアンスとベストプラクティス
データレジデンシー
- マルチリージョンサポート: ユーザーに最も近いストレージリージョンを選択
- プライベートデプロイメント: 完全なデータ制御のためのセルフホスティング
- GDPR考慮事項: 最小限のPII収集、要求に応じたデータ削除
アクセス制御
- ユーザー認証: オプションのClerkベース認証
- APIキー管理: 安全なトークンベースのAPIアクセス
- レート制限: 悪用とDDoSからの保護
セキュリティヘッダー
- Content Security Policy (CSP): XSS攻撃を防止
- X-Frame-Options: クリックジャッキングを防止
- Strict-Transport-Security: HTTPSを強制
開発者向け
APIセキュリティ
// すべてのAPIリクエストには認証が必要
const response = await fetch('https://previewfile.dev/api/u', {
method: 'POST',
headers: {
'Authorization': `Bearer ${API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
url: 'https://example.com/confidential.pdf',
ttlMinutes: 60,
watermark: '機密 - 内部使用のみ',
noDownload: true,
oneTime: false,
}),
});セキュリティ設定例
// 高度にセキュアなプレビューリンクを作成
const securePreview = await trpc.preview.create.mutate({
file: uploadedFile,
ttlMinutes: 30, // 30分で期限切れ
watermark: `${user.email} - ${new Date().toISOString()}`, // ユーザー + タイムスタンプウォーターマーク
noDownload: true, // ダウンロードを防止
oneTime: true, // 一回限りリンク
});脅威モデル
PreviewFile.devは以下から保護します:
- ✅ 不正な配布: TTLと一回限りリンクが制御されていない共有を防止
- ✅ データ盗用: ダウンロード保護とウォーターマークがコピーを阻止
- ✅ ホットリンク/帯域幅盗用: リファラー検証と署名付きURL
- ✅ XSS/インジェクション攻撃: 厳格なCSPと入力検証