Что использовать в качестве соли для md5?

В cms используется автоматическое создание превью изображений.

Для этого в mod_rewrite настроено правило, по которому запрос к несуществующей картинке, например image.100x100.jpg, перенаправляется на скрипт, создающий превью изображения image.jpg размером 100x100.


Для того, чтобы злоумышленник не мог самостоятельно вызвать создание любого превью, в этот скрипт передается так же некий токен, который является md5(имя файла + соль).


Суть проблемы в выборе соли, а именно:

Не хочется просить пользователя придумывать соль при установке cms.

Не хочется автоматически генерировать соль при установке, так как не все пользуются установщиком, таким образом соль у многих будет одинаковая, чего допускать нельзя.

Вообще, не очень хочется где-либо хранить её.


Хочется просто «на лету» брать в качестве соли некие данные, которые уникальны для каждой копии скрипта и неизвестны злоумышленнику.


Например, время последней модификации какого-то файла подошло бы, если бы не подбиралось так легко.

Так же подошло бы просто имя домена, на котором работает скрипт, но оно известно злоумышленнику.


Ну и, очевидно, соль не должна меняться со временем, по крайней мере какое-то достаточно длительное время


UPD: похоже darkslesh указал верный путь — хранить в настройках соль(как просто случайное число)+домен, для которого она создана, и при несовпадении домена в настройках с реальным доменом, перегенерировать соль.
  • Вопрос задан
  • 3408 просмотров
Пригласить эксперта
Ответы на вопрос 7
darkslesh
@darkslesh
А не проще ли сделать такую систему:
1) создаётся файл (не в WEB папке или в закрытой папке )
2) в этот файл записывается 2 строки типа xxxxxxxxx и randomstr, где xxxxx — ip адрес сервера или домен, а вторая строка — как раз соль которая тебе нужна
3) скрипт который использует эту соль считывает файл, затем если IP/домен не совпадает, то сгенерить файл, с новыми параметрами.
Таким образом не нужно будет заботится о том, что скрипт работает без установки.

Еще есть вариант как нибудь извратится с использованием _SERVER[«UNIQUE_ID»] который генерится при каждом запросе пользователя.
Ответ написан
asleep
@asleep
Фактически, получается, что требуется подтвердить подлинность запроса превьюшки. Причем обычно, как я понимаю, этот запрос будет генерить сама cms. Ну так возьми и зашифруй MD5(имя файла) любым алгоритмом шифрования. По смыслу — выйдет подпись запроса, которую может сделать только тот, у кого есть ключ (cms).

P.S. А можно пояснить — в чем состоит риск того, что злоумышленник запросит превью любой картинки?
Ответ написан
asleep
@asleep
Ну, в конце концов, если не хочется напрягать пользователя — вшей ключ для подписи в код CMS. Или генерируй один раз случайным образом при первом обращении к превью, после чего сохраняй в файлик и используй повторно.

Вот только повторюсь, мне кажется, это должна быть не соль, а именно ключ подписи.
Ответ написан
Комментировать
Stalker_RED
@Stalker_RED
и при несовпадении домена в настройках с реальным доменом, перегенерировать соль.

и доставив массу веселья тому человеку, который попытается это все перенести на новый домен, или исполльзовать одну сиситему на нескольких доменах сразу.
Ответ написан
darkslesh
@darkslesh
Или задействовать время запроса. т.е. как только человек запросил страницу, то брать это время с точность до микросекунд и потом его использовать. Подбирать будет бесполезно такое.
Ответ написан
RazoR_Empire
@RazoR_Empire
А почему не хотите сгенерировать превьюшки один раз и отдавать из без каких-либо проблем, например через nginx?
Ответ написан
Yan169
@Yan169
Я немного не понял, в какой момент будет генерироваться md5-токен?

В html-коде страницы будет
[img src="image.100x100.jpg"/]
или
[img src="image.100x100.jpg{md5(...)}"/]
?

Если первое (md5 генерируется на пути от http-запроса до скрипта превью), то никакой защиты по сути нет.

Если второе (md5 генерируется в момент волеизъявления использования изображения в какой-либо части сайта — создание шаблона, документа и т.п.), то что мешает вместо генерирования md5 создать в этот момент необходимое превью?
Ответ написан
Ваш ответ на вопрос

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

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