@Kostik_1993
Web Developer

Защита от дублирования в картинок Laravel?

Есть необходимость, создания защиты от копирования изображений, а именно чтобы нельзя было одну и туже картинку загрузить дважды.
Что можно использовать в качестве ключа? Банально md5 hash картинки? И поможет ли это если картинку переименовать, сменить расширение?

Еще посматриваю в сторону определения степени схожести картинок, но что-то сомневаюсь.
  • Вопрос задан
  • 624 просмотра
Пригласить эксперта
Ответы на вопрос 2
Defman21
@Defman21
>И поможет ли это если картинку переименовать, сменить расширение?

Если при генерации хеш-суммы не учитывалось название файла - то поможет.
stackoverflow.com/a/5055152
Ответ написан
Комментировать
wielski
@wielski
✔ Совет: Вам помогли? Отметьте ответы решением.
Для генерации временной ссылки на картинку напишите хелпер, в функции принимайте ссылку на картинку и сохраняйте ее в сессии. Пример:

namespace App\Helpers;

trait ProtectedImage {
   static function url($image, $path = 'images/'){
     $hash = md5(time() . $image . 'somestring');
     session(['image.'.$hash => $image]);
     return $hash;
   }
}


Создаем наш роут, по которому будем выдавать картинку, к примеру, из Storage:
Route::get('images/{filename}', function ($filename)
{
    $realfilename = session('image.'.$filename);
    if(empty($realfilename)) abort(404);
    $path = storage_path() . '/' . $realfilename;

    $file = File::get($path);
    $type = File::mimeType($path);

    $response = Response::make($file, 200);
    $response->header("Content-Type", $type);

    return $response;
});


При выводе ссылки на картинку, соответственно
ProtectedImage::url('myimage.jpg');

Принцип работы:
Передаем название картинки функции в хелпере, хелпер сохраняет в сессию с md5 ключом, при открытии роута /images/ключ получаем из сессии реальное имя, и выдаем картинку.

Это лишь пример реализации. Можно дополнить как угодно. Либо вместо сессий использовать шифрование с открытым и приватным ключом. Решать вам :)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы