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 :: Как защититься от подобного рода атак.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (4): [1] 2 3 4 »   

> Без описания
scarzie
Отправлено: 24 Августа, 2013 - 19:05:59
Post Id


Новичок


Покинул форум
Сообщений всего: 41
Дата рег-ции: Авг. 2013  


Помог: 1 раз(а)

[+]


Здравствуйте. Даже не знаю атака ли это, но в общем вопрос, как от этого защититься (это полностью мной вымышленная история):
Допустим на сайте forum.ru есть файл delete.php , который удаляет из базы запись с ID присланным в $_POST['id'] . Этот файл загрузится только в том случае, если админ авторизован.
И так, админ авторизован, ходит себе по админке, администрирует (удаляет). И тут ему на email приходит письмо, мол привет, посмотри сайт. А сайт примерно такой:
CODE (html):
скопировать код в буфер обмена
  1. <form action="http://cp.forum.ru/delete.php">
  2.     <input type='hidden' name='id' value='387'>
  3. </form>

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

Все что на данный момент мне пришло в ум, так это для каждой операции смотреть, прислан ли secret_user_key - рандомное число ранее сгенерированное для пользователя.
Например вот с таким файлом delete.php:
PHP:
скопировать код в буфер обмена
  1. if( isset($_POST['secret_user_key']) && $_POST['secret_user_key']==$user_data['secret_user_key']){
  2.     //продолжаем работу
  3. }
, идея злоумышленника уже б не сработала.
Вопрос: есть ли другие способы защиты от такого? Да еще и так, чтобы не пришлось в каждую форму на сайте вставлять этот secret_user_key?

(Отредактировано автором: 24 Августа, 2013 - 19:07:08)

 
 Top
DeepVarvar Супермодератор
Отправлено: 24 Августа, 2013 - 19:09:25
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




scarzie пишет:
Тем самым админ "случайно" удалил ту запись, которую захотел удалить злоумышленник. Это всего лищь пример.
Это называется CSRF.
scarzie пишет:
есть ли другие способы защиты от такого?
Обычно все лепят костыли из одноразовых токенов в ссылках админки.
На самом деле можно сделать проще - тупо проверять реферер.
(Добавление)
Тут говорят мне, что реферер можно подделать Подмигивание
Не забывайте на чьей машине! На машине админа, который клацает CSRF-ссылку!
Это невозможно!
 
 Top
scarzie
Отправлено: 24 Августа, 2013 - 19:23:22
Post Id


Новичок


Покинул форум
Сообщений всего: 41
Дата рег-ции: Авг. 2013  


Помог: 1 раз(а)

[+]


DeepVarvar, большое спасибо, теперь хоть знаю как это называется)
Я сам думал рефер проверять, но его ведь и подделать вроде как можно?
Одноразовые токены - их еще надо записывать куда-то, потом сверять (в сессию или бд)..
Получается что я придумал нормальный, надежный вариант?
(Добавление)
понятно, вопрос про реффер отпал)

(Отредактировано автором: 24 Августа, 2013 - 19:24:08)

 
 Top
caballero
Отправлено: 24 Августа, 2013 - 19:28:40
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




так не давай удалять неавторизованым пользователям
какие проблеммы


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
DeepVarvar Супермодератор
Отправлено: 24 Августа, 2013 - 19:31:10
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




caballero ты не понял прикола, например, вот ссылка, представь что ты авторизован у меня в админке. Что будет если ты клацнешь по ней прямо сейчас:

http://demo[dot]deep-cms[dot]ru/admin/users/delete?id=2

Доступы: admin admin
 
 Top
scarzie
Отправлено: 24 Августа, 2013 - 19:33:42
Post Id


Новичок


Покинул форум
Сообщений всего: 41
Дата рег-ции: Авг. 2013  


Помог: 1 раз(а)

[+]


caballero, я написал же, что все авторизованы. Т.е. для сервера это выглядит так, как буд-то пришел такой-себе нормальный запрос с формы.
Впрочем читаю я про CSRF - так я и думал, надо сначала что-то рандомное создать, куда-то его сохранить, и потом сверять приходит ли этот рандомный ключ. Единственная разница 'моего способа' и способа которые все юзают - это то, что у меня создается ключ для пользователя (при регистрации) и потом каждый раз он сверяется, т.е. ключ постоянный а не одноразовый.


Админы, кстати, у вас тут бага на форуме, при нажатии на "Спасибо", пишет:
", количество сообщений оставленных Вами на форуме, недостаточно для данной операции.", т.е. в начало alert не вставляется ник пользователя))

(Отредактировано автором: 24 Августа, 2013 - 19:34:53)

 
 Top
_Dark_
Отправлено: 24 Августа, 2013 - 19:58:54
Post Id


Частый гость


Покинул форум
Сообщений всего: 231
Дата рег-ции: Окт. 2011  


Помог: 5 раз(а)

[+]


Обычно для этого hidden поле создают у формы с токеном.
 
 Top
DeepVarvar Супермодератор
Отправлено: 24 Августа, 2013 - 20:11:15
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




_Dark_, складывается ощущение что Вы зашли сюда просто чтобы написать.
Ведь видно же что уже все решили.
 
 Top
scarzie
Отправлено: 24 Августа, 2013 - 20:21:58
Post Id


Новичок


Покинул форум
Сообщений всего: 41
Дата рег-ции: Авг. 2013  


Помог: 1 раз(а)

[+]


DeepVarvar, ага, только у меня на своем фронте неприятность появилась, гости тоже оказывается писать могут Бан!
Т.е. использовать ключ для зарегистрированного пользователя не выйдет. Система на сайте no session (никаких сессий, все через бд), и их заводить только для этого тоже не хочется. Остается сначало записывать ключ в БД, а потом искать его. Это + еще одна операция с БД.
Естественно надо еще задачу по крону, чтобы очищать старые не нужные ключи, в общем полный ппц.
 
 Top
VestCoastman
Отправлено: 25 Августа, 2013 - 00:52:20
Post Id



Посетитель


Покинул форум
Сообщений всего: 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 запрос, он получит кукиш.
Так почему костыль то, если способ является безопасным и довольно простым?
 
 Top
DeepVarvar Супермодератор
Отправлено: 25 Августа, 2013 - 01:33:05
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




VestCoastman пишет:
А почему токен является костылем? безопасным и довольно простым?
Потому, что гораздо правильнее использовать то, что уже есть в окружении сервера, чем лепить свои костыли при написании приложения.
Потому, что проверить реферер непосредственно на месте гораздо проще, чем следить за обновлениями токена на предыдущей странице и на текущей, бессмысленно нагружая свое приложение.
(Добавление)
VestCoastman пишет:
довольно простым?
И чей проще то?
 
 Top
teddy
Отправлено: 25 Августа, 2013 - 01:46:18
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Мне тоже интересна эта тема

DeepVarvar пишет:
Что будет если ты клацнешь по ней прямо сейчас:
http://demo[dot]deep-cms[dot]ru/admin/users/delete?id=2
Доступы: admin admin



Так юзер удалиться с id два, админ авторизован и может удалять и это нормально...

у ТС непонятное изречение
scarzie пишет:
. Тем самым админ "случайно" удалил ту запись, которую захотел удалить злоумышленник.

тут скорее наоборот, криворукий пользователь удалил случайно что то на сайте криворукого админа

это конечно не утверждение, я просто не понимаю о чем речь и прошу мне объяснить кому не лень))

если нет доступа к админке, левый пользователь не авторизован, как он может провернуть подобное

(Отредактировано автором: 25 Августа, 2013 - 01:53:41)

 
 Top
DeepVarvar Супермодератор
Отправлено: 25 Августа, 2013 - 01:59:38
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




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

Посмотри что творится на твоем мега-форуме дядя!

Ты же даже смотреть не будешь на ссылку, так клацнешь.
А там будет веселье такое, что ты своим кликом по ссылке удалишь чей-нибудь акк, например лучшего модера. И это еще самое безобидное, что я тебе могу показать.
 
 Top
teddy
Отправлено: 25 Августа, 2013 - 02:02:14
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Так откуда злоумышленник узнает ссылку? Максимум если товарищь - подсмотрит и то врядли будет такое делать если проект серьезный.. ладно пусть даже угадает

если такой страх есть, то что мешает добавить подтверждение при удалении "Вы уверены что хотите удалить такую то запись" ?
 
 Top
DeepVarvar Супермодератор
Отправлено: 25 Августа, 2013 - 02:04:25
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




teddy пишет:
Так откуда злоумышленник узнает ссылку?
Откуда угодно - ты же форум писать с нуля не будешь, а магазин? Тоже нет, значит узнав на каком движке работает твой ресурс я смогу писать любые корректные ссылки в твою админку. И не только ГЕТ, но и ПОСТ.
(Добавление)
teddy пишет:
Вы уверены что хотите удалить такую то запись
Еще один костыль и лишняя страница.
(Добавление)
И вот на протяжении уже пятнадцати сообщений я тут распинаюсь перед каждым вновь зашедшим про одно и то же.
Мне кажется Вам лень читать то что написано выше.

Я отсюда сливаюсь..
 
 Top
Страниц (4): [1] 2 3 4 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB