Как защитить файл от скачивания сторонним скриптом?

sanu0074

Новичок
Есть скрипт который отправляет файл пользователя на сервер (картинку), рисует что-то на ней и возвращает ссылку на скачивание в браузер в виде JSON.
Задача в том, как правильно отдать этот файл юзеру, чтоб он смог забрать его только браузером, например чтоб никто не смог со своей странички отправить файл на мой скрипт который обрабатывает файл пользователя (картинку) и получить ссылку на скачивание и загрузить файл себе. Что можно придумать?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
sanu0074, посмотри как можно защититься от Сross Site Request Forgery.

И есть разница между:
чтоб он смог забрать его только браузером
и
чтоб никто не смог со своей странички отправить файл на мой скрипт который обрабатывает файл пользователя
Во втором случае - ответ выше
 

Активист

Активист
Команда форума
Есть скрипт который отправляет файл пользователя на сервер (картинку), рисует что-то на ней и возвращает ссылку на скачивание в браузер в виде JSON.
Задача в том, как правильно отдать этот файл юзеру, чтоб он смог забрать его только браузером, например чтоб никто не смог со своей странички отправить файл на мой скрипт который обрабатывает файл пользователя (картинку) и получить ссылку на скачивание и загрузить файл себе. Что можно придумать?
Все можно подделать. Только капча.
 

sanu0074

Новичок
AndreyUgnich
Можно ограничить доступ к вашему скрипту. Например, авторизацией.
нет, скрипт доступен и гостям
Еще можете анализировать $_SERVER['HTTP_REFERER']
такой заголовок можно подделать

Активист,
Все можно подделать. Только капча.
капчу как вариант можно рассмотреть


c0dex, да, суть в том чтоб никто не смог со своей странички отправить файл, прочел методы защиты от CSRF:
- Используйте POST-метод в формах вместо GET.
- Отключите register_globals
- Запрашивайте идентификатор сессии через отдельное поле
- Один из самых простых и надежных примеров реализации — токен генерируется при каждом запросе новый и устанавливается в cookies пользователя а также добавляется в параметры форм и ссылок на странице, и затем при получении каждого запроса сравнивается токен из куков и токен указанный в параметрах формы.
Все эти вещи можно подделать....
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Токен хранится в сессии, токен хранится в форме на клиенте. Подделывай.
 

sanu0074

Новичок
c0dex,
Токен хранится в сессии, токен хранится в форме на клиенте. Подделывай.
ну да, я ж перечислил этот варик в списке которые подделываются
получается только капча спасет
 

AnrDaemon

Продвинутый новичок
Капчу давно распознают. Сколько не менял капчу, на форуме боты не переводились.
Так что прежде чем что-то защищать, подумайте сначала, стоит ли оно ваших усилий. И действуйте соответственно.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Я может быть чего-то не понимаю...

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

Что ты будешь подделывать? Пытаться угадать какой он на сервере?

В любом случае не спасет от пары нанятых индусов с фриланса.
 

Активист

Активист
Команда форума
Я может быть чего-то не понимаю...

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

Что ты будешь подделывать? Пытаться угадать какой он на сервере?

В любом случае не спасет от пары нанятых индусов с фриланса.
Что такое сессия? Это значение sess id в куке. Курлом (с поддержкой кук) заходим на страницу скачивания, парсим форму (через DOM), получаешь сгенерированный токен, скачиваешь. Я кстати успешно прошел антибота Яндекса, правда у них там много тонкостей. Все можно подделать. Единственное на что можно рассчитывать в предложенным вами варианте - это на то, что не будут писать бота под этот проект конкретно.
 
Сверху