Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Как защититься от подобного рода атак.
Покинул форум
Сообщений всего: 41
Дата рег-ции: Авг. 2013
Помог: 1 раз(а)
[+]
Здравствуйте. Даже не знаю атака ли это, но в общем вопрос, как от этого защититься (это полностью мной вымышленная история):
Допустим на сайте forum.ru есть файл delete.php , который удаляет из базы запись с ID присланным в $_POST['id'] . Этот файл загрузится только в том случае, если админ авторизован.
И так, админ авторизован, ходит себе по админке, администрирует (удаляет). И тут ему на email приходит письмо, мол привет, посмотри сайт. А сайт примерно такой:
При загрузке этой страницы, форма сразу отправляется. Тем самым админ "случайно" удалил ту запись, которую захотел удалить злоумышленник. Это всего лищь пример. Так можно поступить с чем угодно, например я создам страничку, которая будет отправлять форму на какой-то ранее мной изученный сайт, с матами, например отправка сообщений на чей-то форум.
Все что на данный момент мне пришло в ум, так это для каждой операции смотреть, прислан ли secret_user_key - рандомное число ранее сгенерированное для пользователя.
Например вот с таким файлом delete.php:
, идея злоумышленника уже б не сработала.
Вопрос: есть ли другие способы защиты от такого? Да еще и так, чтобы не пришлось в каждую форму на сайте вставлять этот secret_user_key?
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
scarzie пишет:
Тем самым админ "случайно" удалил ту запись, которую захотел удалить злоумышленник. Это всего лищь пример.
Это называется CSRF.
scarzie пишет:
есть ли другие способы защиты от такого?
Обычно все лепят костыли из одноразовых токенов в ссылках админки.
На самом деле можно сделать проще - тупо проверять реферер. (Добавление)
Тут говорят мне, что реферер можно подделать
Не забывайте на чьей машине! На машине админа, который клацает CSRF-ссылку!
Это невозможно!
Покинул форум
Сообщений всего: 41
Дата рег-ции: Авг. 2013
Помог: 1 раз(а)
[+]
DeepVarvar, большое спасибо, теперь хоть знаю как это называется)
Я сам думал рефер проверять, но его ведь и подделать вроде как можно?
Одноразовые токены - их еще надо записывать куда-то, потом сверять (в сессию или бд)..
Получается что я придумал нормальный, надежный вариант? (Добавление)
понятно, вопрос про реффер отпал)
Покинул форум
Сообщений всего: 41
Дата рег-ции: Авг. 2013
Помог: 1 раз(а)
[+]
caballero, я написал же, что все авторизованы. Т.е. для сервера это выглядит так, как буд-то пришел такой-себе нормальный запрос с формы.
Впрочем читаю я про CSRF - так я и думал, надо сначала что-то рандомное создать, куда-то его сохранить, и потом сверять приходит ли этот рандомный ключ. Единственная разница 'моего способа' и способа которые все юзают - это то, что у меня создается ключ для пользователя (при регистрации) и потом каждый раз он сверяется, т.е. ключ постоянный а не одноразовый.
Админы, кстати, у вас тут бага на форуме, при нажатии на "Спасибо", пишет:
", количество сообщений оставленных Вами на форуме, недостаточно для данной операции.", т.е. в начало alert не вставляется ник пользователя))
Покинул форум
Сообщений всего: 41
Дата рег-ции: Авг. 2013
Помог: 1 раз(а)
[+]
DeepVarvar, ага, только у меня на своем фронте неприятность появилась, гости тоже оказывается писать могут
Т.е. использовать ключ для зарегистрированного пользователя не выйдет. Система на сайте no session (никаких сессий, все через бд), и их заводить только для этого тоже не хочется. Остается сначало записывать ключ в БД, а потом искать его. Это + еще одна операция с БД.
Естественно надо еще задачу по крону, чтобы очищать старые не нужные ключи, в общем полный ппц.
VestCoastman
Отправлено: 25 Августа, 2013 - 00:52:20
Посетитель
Покинул форум
Сообщений всего: 374
Дата рег-ции: Дек. 2010
Помог: 3 раз(а)
DeepVarvar, у меня появился вопрос. А почему токен является костылем?
Допустим есть таже страница
1 - http://demo[dot]deep-cms[dot]ru/admin/users/delete?id=2
и есть страница, например(ну или предыдущая, только с POST запросом).
2 - http://demo[dot]deep-cms[dot]ru/admin/users/delete?id=2&true
Первая страница создает токен, допустим из md5() в поле hidden(можно даже какой-нибуть алгоритм с солью придумать или заносить поле в базу, а при удалении удалять) и передает на вторую страницу. На второй странице это дело проверяется. Злоумышленник не сможет просто напросто подделать токен и отправляя прямой post запрос, он получит кукиш.
Так почему костыль то, если способ является безопасным и довольно простым?
DeepVarvar
Отправлено: 25 Августа, 2013 - 01:33:05
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
VestCoastman пишет:
А почему токен является костылем? безопасным и довольно простым?
Потому, что гораздо правильнее использовать то, что уже есть в окружении сервера, чем лепить свои костыли при написании приложения.
Потому, что проверить реферер непосредственно на месте гораздо проще, чем следить за обновлениями токена на предыдущей странице и на текущей, бессмысленно нагружая свое приложение. (Добавление)
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
teddy пишет:
Так юзер удалиться с id два, админ авторизован и может удалять и это нормально...
Так ты попробуй, доступы я дал. И это не нормально. Представь - ты админ мега-крутого форума и тебе я присылаю письмо на ящик, а ты их получаешь в день десятки, устал уже получать, а я пишу мол:
Ты же даже смотреть не будешь на ссылку, так клацнешь.
А там будет веселье такое, что ты своим кликом по ссылке удалишь чей-нибудь акк, например лучшего модера. И это еще самое безобидное, что я тебе могу показать.
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
Так откуда злоумышленник узнает ссылку? Максимум если товарищь - подсмотрит и то врядли будет такое делать если проект серьезный.. ладно пусть даже угадает
если такой страх есть, то что мешает добавить подтверждение при удалении "Вы уверены что хотите удалить такую то запись" ?
DeepVarvar
Отправлено: 25 Августа, 2013 - 02:04:25
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
teddy пишет:
Так откуда злоумышленник узнает ссылку?
Откуда угодно - ты же форум писать с нуля не будешь, а магазин? Тоже нет, значит узнав на каком движке работает твой ресурс я смогу писать любые корректные ссылки в твою админку. И не только ГЕТ, но и ПОСТ. (Добавление)
teddy пишет:
Вы уверены что хотите удалить такую то запись
Еще один костыль и лишняя страница. (Добавление)
И вот на протяжении уже пятнадцати сообщений я тут распинаюсь перед каждым вновь зашедшим про одно и то же.
Мне кажется Вам лень читать то что написано выше.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.