Скажу сразу, в Jquery и Ajax понимаю лишь поверхностно, могу перебрать чужой скрипт, немного дополнить, но никак не написать свой.
Сейчас прикрутил мульти-загрузчик изображений фотографий, суть в том что юзер загружает свои фотографии пачкой в определенный альбом, при успешной загрузке данные заносятся в отдельную таблицу бд:
ID | IMG
ID - идентификатор альбома
IMG - название файла
Соответственно есть еще одна таблица с альбомами где уже каждый альбом принадлежит конкретному юзеру.
Вопрос в следующем: Как мне безопасно передать ID альбома Ajax скрипту чтобы защититься от подмены значения?
В данный момент передаю ID в скрытом поле input, работает, но совершенно небезопасно.
Как вариант можно делать дополнительный запрос к БД перед загрузкой файла, в котором проверять есть ли такой альбом и действительно ли он принадлежит данному юзеру - насколько правильно будет так сделать?
Как вариант можно делать дополнительный запрос к БД перед загрузкой файла, в котором проверять есть ли такой альбом и действительно ли он принадлежит данному юзеру - насколько правильно будет так сделать?
Только так и будет правильно. ВСЕГДА осуществляйте валидацию входящих данных на сервере.
@whats дело не в том что пугает, дело в другом: к примеру юзер загружает 10 фото (возможно загрузить максимум 10), каждое фото проверяется на валидность, генерируется новое название, создается временный файл, сохраняется большое фото с применением фильтров и маленькое превью, заносится запись в БД, удаляется временный файл. Процедура еще более усложнится и затянется если проверять на принадлежность, но раз других вариантов нет, то придется :(
@passshift ну если вы адовый HighLoad пишете, добавьте кеш. Проверили, что альбом принадлежит пользователю, сохранили на минуту в memcache какой-нибудь. При проверке сначала ищете значение в кеше, если там нет, то уже лезете в базу.
@passshift вам в любом случае делать этот запрос. Сперва надо проверить а существует ли альбом в который надо грузить фотки?
Если существует, значит у альбома есть владелец.
Если фотки грузит владелец - то всё ок, если нет - пшелнах.
@cjbars да я так и собрался делать, по крайней мере все остальные действия именно так и проверяю где нет Ajax, но и сами действия проще, без манипуляции с файлами, например: удаление альбома с определенным ID - проверяем существует ли он и совпадает ли с владельцем, и уже потом удаляем.
Можно передавать ключ и записывать его в бд а потом проверять, как вариант.
Токен, почти тоже самое, но это сэкономит ресурсы и время... просто в берешь 1ну переменную и в нее заталкиваешь: id что-то еще и сам токен. Ну и после просто проверить или расшифровать, можно улучшить, добавить 1ну переменную что бы она писалась в бд а после сверялись. Честно говоря вариантов куча, но легче взломать чем защитить.
Запись ключа в БД исключена т.к. это 1 запрос на запись + 1 запрос на сверку, не подходит. Как вариант записывать токен в куку и проверять, насколько это безопаснее варианта сверки альбома с его владельцем?