Rakeタスクのサニタイズアップロード
GitLab 11.9以降では、JPGまたはTIFF画像のアップロードからEXIFデータが自動的に取り除かれます。
EXIFデータには機密情報(GPSの位置情報など)が含まれている可能性があるため、GitLabの以前のバージョンにアップロードされた既存の画像からEXIFデータを削除することができます。
前提条件
このRakeタスクを実行するには、exiftool
がインストールされている必要があります。GitLabをインストールした場合:
- Linux パッケージを使えば準備完了です。
-
セルフ・コンパイル・インストールを使用する場合は、
exiftool
がインストールされていることを確認してください:# Debian/Ubuntu sudo apt-get install libimage-exiftool-perl # RHEL/CentOS sudo yum install perl-Image-ExifTool
既存のアップロードからEXIFデータを削除
既存のアップロードからEXIFデータを削除するには、次のコマンドを実行します:
sudo RAILS_ENV=production -u git -H bundle exec rake gitlab:uploads:sanitize:remove_exif
デフォルトでは、このコマンドは「ドライラン」モードで実行され、EXIFデータは削除されません。このコマンドは、画像をサニタイズすべきかどうか(およびその数)を確認するために使用できます。
Rakeタスクは以下のパラメータを受け付けます。
パラメータ | 種類 | 説明 |
---|---|---|
start_id | 整数。 | IDが同じかそれ以上のアップロードのみが処理されます。 |
stop_id | 整数。 | IDが等しいか小さいアップロードのみが処理されます。 |
dry_run | boolean | EXIF データを削除せず、EXIF データがあるかどうかだけをチェックします。デフォルトはtrue
|
sleep_time | フロート | 各画像の処理後に何秒間ポーズするかを指定します。デフォルトは0.3秒 |
uploader | 文字列です。 | 指定されたアップローダのアップロードに対してのみサニタイズを実行します:FileUploader ,PersonalFileUploader , またはNamespaceFileUploader
|
since | 期日 | 指定された日付よりも新しいアップロードに対してのみサニタイズを実行します。例えば2019-05-01
|
アップロードが多すぎる場合は、次の方法でサニタイズを高速化できます:
-
sleep_time
を低い値に設定します。 - 複数の Rake タスクを並行して実行し、それぞれのアップロード ID を別々の範囲に設定します(
start_id
とstop_id
を設定します)。
すべてのアップロードからEXIFデータを削除するには、以下を使用します:
sudo RAILS_ENV=production -u git -H bundle exec rake gitlab:uploads:sanitize:remove_exif[,,false,] 2>&1 | tee exif.log
100から5000の間のIDを持つアップロードのEXIFデータを削除し、各ファイルの後に0.1秒間休止するには、次のようにします:
sudo RAILS_ENV=production -u git -H bundle exec rake gitlab:uploads:sanitize:remove_exif[100,5000,false,0.1] 2>&1 | tee exif.log
出力は長いことが多いので、exif.log
ファイルに書き込まれます。
アップロードのサニタイズに失敗した場合、Rakeタスクの出力にエラーメッセージが表示されるはずです。典型的な理由としては、ファイルがストレージにないか、有効な画像でないことが挙げられます。
エラーがあればレポーターが報告し、エラー出力と(可能であれば)画像を添えて、イシューのタイトルに接頭辞 ‘EXIF’ を使用してください。