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_runbooleanEXIF データを削除せず、EXIF データがあるかどうかだけをチェックします。デフォルトはtrue
sleep_timeフロート各画像の処理後に何秒間ポーズするかを指定します。デフォルトは0.3秒
uploader文字列です。指定されたアップローダのアップロードに対してのみサニタイズを実行します:FileUploader,PersonalFileUploader, またはNamespaceFileUploader
since期日指定された日付よりも新しいアップロードに対してのみサニタイズを実行します。例えば2019-05-01

アップロードが多すぎる場合は、次の方法でサニタイズを高速化できます:

  • sleep_time を低い値に設定します。
  • 複数の Rake タスクを並行して実行し、それぞれのアップロード ID を別々の範囲に設定します(start_idstop_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’ を使用してください。