File Hash
サイトにアップロードされた各ファイルの暗号学的ハッシュを生成・保存し、ファイル検証、重複検出、コンテンツアドレス可能ストレージを実現します。
filehash
インストール
composer require 'drupal/filehash:^3.2'
composer require 'drupal/filehash:^2.1'
概要
File Hash モジュールは、Drupal サイトにアップロードされた各ファイルの暗号学的ハッシュを生成・保存します。archive.org から wikileaks.org まで様々なサイトで一般的に見られるアップロードファイルのハッシュにより、ファイルを一意に識別し、重複ファイルを検出し、コピーを元のソースと照合して検証することができます。
このモジュールは、複数の暗号ファミリーにまたがる18種類のハッシュアルゴリズムをサポートしています:BLAKE2b(128、160、224、256、384、512ビットバリアント)、MD5、SHA-1、SHA-2ファミリー(SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256)、SHA-3ファミリー(SHA3-224、SHA3-256、SHA3-384、SHA3-512)。ハッシュ値はFileエンティティのベースフィールドとして保存され、Views、Token、テンプレート、エンティティクエリで利用可能です。
主な機能には、サイト全体およびフィールド単位での重複ファイル防止、既存ファイルの遅延または一括ハッシュ生成、元のファイルハッシュのオプション保存(アップロード後にファイルが処理される場合に便利)、Identiconによるハッシュの視覚的表現があります。このモジュールはViewsと統合して重複ファイルのフィルタリングが可能で、コマンドライン操作用のDrushコマンドも提供しています。
Features
- ファイルアップロード時に暗号学的ハッシュを自動生成
- BLAKE2b、MD5、SHA-1、SHA-2、SHA-3ファミリーを含む18種類のハッシュアルゴリズムをサポート
- Views、テンプレート、エンティティクエリから簡単にアクセスできるよう、ハッシュをFileエンティティのベースフィールドとして保存
- サイト全体およびフィールド単位での重複ファイル検出・防止
- 処理による変更前の元のファイルハッシュをオプションで保存
- ファイル読み込み時に欠落したハッシュを自動生成する遅延ハッシュ生成オプション
- 管理UIまたはDrushコマンドによる既存ファイルの一括ハッシュ生成
- 無効化されたアルゴリズムのデータベースカラムを削除するクリーンアップ機能
- コンテンツアドレス可能ストレージ用のpairtree Tokenを含むファイルハッシュのTokenサポート
- 重複ファイルフィルター付きのViews統合
- ハッシュの視覚的表現のためのIdenticonフォーマッター(サードパーティライブラリが必要)
- ファイルとそのハッシュ値を表示するテーブルフォーマッター
- ハッシュ値でファイルを検索するエンティティクエリサポート
- ハッシュ生成、クリーンアップ、重複レポート用のDrushコマンド
- Drupal 7からの移行サポート
Use Cases
ファイル検証と整合性チェック
ファイルハッシュを使用して、ダウンロードしたファイルのコピーが元のファイルと一致することを検証します。ダウンロードページにハッシュを表示して、ユーザーがsha256sumやb2sumなどのコマンドラインツールを使用してファイルの整合性を検証できるようにします。
重複ファイル防止
dedupe設定を有効にして、ユーザーがサイトにすでに存在するファイルをアップロードすることを防止します。ストレージコストの削減と正規のファイル参照の確保に役立ちます。サイト全体またはフィールドごとに有効化できます。
コンテンツアドレス可能ストレージ
pairtree Token([file:filehash-sha256-pair-1]/[file:filehash-sha256-pair-2])を使用して、ハッシュに基づいてファイルをディレクトリに整理します。たとえば、SHA-256ハッシュがe3b0c44298fc1c149...のファイルはfiles/e3/b0/に保存されます。
重複ファイルの検出
Drushレポートコマンド(drush filehash:report)を使用するか、「重複ハッシュあり」フィルターを持つViewを作成して、サイト上の重複ファイルをクリーンアップまたは統合のために特定します。
ハッシュによるファイル検索
エンティティクエリを使用してハッシュ値でファイルを検索します。特定のファイルをプログラム的に見つけたり、特定のハッシュを持つファイルがすでに存在するかどうかを確認するのに便利です。
監査証跡とフォレンジック
ファイルが処理される(画像のリサイズなど)場合、元のファイルハッシュを現在のハッシュとは別に保存します。これにより、元のアップロードファイルと現在の状態の両方を検証できます。
Tips
- 最高のパフォーマンスのため、実際に必要なハッシュアルゴリズムのみを有効にしてください
- SHA-256は、セキュリティと互換性のバランスが取れた汎用的な選択です
- SHA-512/256は、64ビットシステムでより良いパフォーマンスを提供しながら、256ビットのセキュリティを維持します
- BLAKE2bアルゴリズムはSHA-2より高速なパフォーマンスを提供しますが、Sodium PHP拡張が必要です
- autohash設定は多くのファイルがあるサイトでパフォーマンスに影響を与える可能性があります - 代わりに一括生成の使用を検討してください
- 複数のユーザーによる同時アップロードで同じファイルがアップロードされるのを防ぐ必要がある場合は、厳格なdedupeモードを使用してください
- pairtree Tokenは、1つのフォルダに多くのファイルがあるファイルシステムの制限を回避するために、ディレクトリ間でファイルを分散するのに便利です
Technical Details
Admin Pages 3
/admin/config/media/filehash
使用するハッシュアルゴリズム、重複ファイル検出の動作、ハッシュ生成オプションなど、File hash設定を構成します。
/admin/config/media/filehash/generate
以前にアップロードされたすべてのファイルのファイルハッシュを一括生成します。これは、既存のファイルがあるサイトでモジュールを有効にする場合や、新しいハッシュアルゴリズムを有効にする場合に便利です。
/admin/config/media/filehash/clean
無効化されたハッシュアルゴリズムのデータベースカラムを削除します。これにより、無効化されたアルゴリズムのハッシュデータが永続的に削除されます。
Hooks 11
hook_entity_base_field_info
有効な各アルゴリズムのハッシュ値ベースフィールドをFileエンティティに追加します。フィールドは'filehash'フィールドタイプとして保存され、インデックス付きのvarchar_asciiカラムになります。
hook_entity_storage_load
autohash設定が有効な場合、ファイル読み込み時に欠落したハッシュを生成します。
hook_ENTITY_TYPE_create
新しいファイルエンティティが作成されたときに呼び出されます。設定されている場合、元のハッシュを含む初期ハッシュ値を設定します。
hook_ENTITY_TYPE_presave
ファイルエンティティが保存される前に呼び出されます。欠落したハッシュを生成するか、rehash設定に基づいてすべてのハッシュを再生成します。
hook_field_widget_single_element_form_alter
フィールド設定でdedupeが有効な場合、file/imageフィールドウィジェットにFileHashDedupeアップロードバリデーターを追加します。
hook_form_FORM_ID_alter
ファイルフィールド設定フォームにdedupe設定を追加し、フィールドごとの重複検出設定を可能にします。
hook_views_data_alter
有効な各アルゴリズムの「重複ハッシュあり」フィルターをViewsのfile_managedテーブルに追加します。
hook_token_info
フルハッシュとpairtree Tokenを含むファイルハッシュのToken情報を提供します。
hook_tokens
ファイルハッシュ値とpairtreeコンポーネントのToken置換を生成します。
hook_help
管理ページでモジュールのヘルプテキストを提供します。
hook_requirements
BLAKE2bアルゴリズムが有効な場合、Sodium PHP拡張のステータスをチェックします。
Drush Commands 3
drush filehash:generate
ハッシュ値が欠落しているすべての既存ファイルのハッシュを生成します。バッチプロセスとして実行されます。
drush filehash:clean
無効化されたハッシュアルゴリズムのデータベースカラムを削除します。無効化されたアルゴリズムのハッシュデータを永続的に削除します。
drush filehash:report
重複ハッシュを持つファイルをデータベースでクエリして、重複ファイルのリストを出力します。
Troubleshooting 6
BLAKE2bアルゴリズムにはSodium PHP拡張が必要です。管理 > レポート > ステータスレポートでSodium拡張のステータスを確認してください。拡張をインストールするか、paragonie/sodium_compatポリフィルを使用してください。
まずcronを実行してデータベースカラムの削除を完了させてから、アルゴリズムを再度有効にしてください。
「保存時に常にファイルを再ハッシュ」設定を有効にして、ファイルが保存されるたびにハッシュを再生成します。デフォルトでは、ハッシュは一度だけ生成されます。
/admin/config/media/filehash/generateにアクセスするか、'drush filehash:generate'を実行して、すべての既存ファイルのハッシュを一括生成してください。
Identiconフォーマッターにはサードパーティライブラリが必要です。'composer require yzalis/identicon:^2.0'を実行してインストールしてください。
続行する前にcronを実行してみてください。フィールドの削除がまだ進行中の場合、このエラーが発生することがあります。
Security Notes 4
- 重複検出を有効にすると、プライバシーに影響があります - ユーザーはファイルをアップロードしようとすることで、特定のファイルがサイトに存在するかどうかを判断できる可能性があります
- MD5とSHA-1は暗号学的に弱いと見なされており、それらを必要とするシステムとの互換性のためにのみ使用すべきです
- セキュリティに敏感なアプリケーションには、SHA-256以上のアルゴリズムを使用してください
- モジュールはアップロード時にファイルハッシュを検証して、重複ファイル攻撃を防止します