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 :: Нужно ли сверять токен в БД? [3]
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
teddy пишет:
против замазанного айфрейма реферер бессилен
Токен тоже.
teddy пишет:
Этого токена не будет в POST форме
Какая разница куда ты (пост формы, экшн формы, срц фрейма) распихиваешь параметры?
Токен всеравно будет где-то в контексте запроса.
teddy пишет:
одноразовый/многоразовый
Да хоть полуразовый.
teddy пишет:
заголовки - произвольный текст
А токен это (само|недо|пере)произвольный текст?
teddy пишет:
дополнительно шаманить
Не надо ничего шаманить на стороне приложения кроме реферера.
Все остальное шаманицца в конфиге сервера: корс + фреймопшнс (ну ладно, можно и это впилить в приложение ради бомжей селящихся на шаредах)
Кстати, что мне помешает написать проверку реферера и для подгрузки списка пользаков?
(для меня это две строки кода в экшне, а в новой версии я впилю это сразу в базовую форму)
Социальная инженерия сразу обсерится, т.к. придется мазанную форму сначала бросить просто в админку, затем заставить кликнуть на список пользаков, а потом уже что-то делать с пользаком ))
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
DeepVarvar пишет:
Токен тоже.
Это смотря как приготовить.
Смотри, ты знаешь адрес этого топика и хочешь запостить от моего имени сообщение используя айфрейм. Ты знаешь адрес топика, но не знаешь мой GET токен(предположим что он тут есть). Страницу ты подгрузить сможешь из соображений юзер-френдли, но форму или сам токен я тебе просто не отдам, потому что адрес был запрошен без валидного параметра-токена.
Эти корсы и фреймопшены не кроссбраузерны и говорить тут неочем хотя бы потому, что клиентское приложение не должно заниматься безопасностью сервера.
DeepVarvar пишет:
Социальная инженерия сразу обсерится, т.к. придется мазанную форму сначала бросить просто в админку, затем заставить кликнуть на список пользаков, а потом уже что-то делать с пользаком ))
Да. Это хорошо, что ты понимаешь что проверка реферера не надежна ))
А я в свою очередь понимаю, что провести такую атаку очень сложно, но я сейчас не говорю про сложность атаки, а про наличие уязвимости в конечном счете...
DeepVarvar пишет:
А токен это (само|недо|пере)произвольный текст?
В отличии от реферера, нужно быть гадалкой что бы его угадать. Ну или уметь его украсть. Тут уже все зависит уровня безопасности приложения или дурости юзера.
А реферер - в большинстве CSRF атак обычно известен заранее. Разница же очевидна.
DeepVarvar пишет:
Понимаешь, да?
Да. А ещё я понимаю, что сервер не должен зависеть от клиента в плане безопасности.
Никогда не знаешь какие фичи/дыры/при обновлении браузера или просто казалось бы "безобидные настройки" отправляемых заголовков есть в наличии.
DeepVarvar
Отправлено: 24 Ноября, 2015 - 22:09:48
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
teddy пишет:
Страницу ты подгрузить сможешь из соображений юзер-френдли, но форму или сам токен я тебе просто не отдам
Согласись это равнозначно что:
Страницу ты подгрузить сможешь из соображений юзер-френдли, и даже форму отправишь, но что-то изменить, если мне не понравится реферер, я тебе просто не дам.
teddy пишет:
Эти корсы и фреймопшены
Первый прекрасно везде работает для аякса, второй -- для тех кто умеет, а остальные подтянутся позже.
Но речь не про них.
teddy пишет:
про наличие уязвимости в конечном счете
Токен аналогично уязвим.
teddy пишет:
А реферер - в большинстве CSRF атак обычно известен заранее
И что это дает, когда его не получится подменить?
Ну или расскажи мне историю успеха подмены реферера у аякса, формы, ссылки или фрейма.
teddy пишет:
сервер не должен зависеть от клиента в плане безопасности
Тогда за каким лядом ты прикручиваешь токены?
Нет, не так.
С чего ты взял что есть хоть какая-то клиентозависимая разница между реферером (который даже прописан в спецификации) и неспековым велосипедом (который еще и работает на более высоком уровне) в виде токенов?
Если в спеках сказано -- реферер, значит я в праве его ожидать, и слать лесом если мне что-то не понравилось.
А в вашем случае -- велосипеды, тысячи их.
teddy пишет:
безобидные настройки
ССЗБ.
Но, честное слово.
Если бы я разрабатывал что-то типа банковских платежей, то я бы применил все известные мне методы валидации, включая экзотику типа етагов, маустрекинга и ванпикселей.
Однако в этой вот дискуссии я повторю в сотый раз -- реферер, это все что нужно, т.к. он проще, а эффективность у него такая-же как и у токена.
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
DeepVarvar пишет:
Страницу ты подгрузить сможешь из соображений юзер-френдли, и даже форму отправишь, но что-то изменить, если мне не понравится реферер, я тебе просто не дам.
А реферер тебе понравится Сразу после первого клика по какой нибудь ссылке в айфрейме. Да, это сложно провернуть, но факт остается фактом, это осуществимо технически.
Если хорошенько покопаться, может ещё варианты найдутся.
Например если кто то покопается в настройках/плагинах браузера жертвы, может поставить постоянный реферер. Надо глянуть что там предлагают конфиги и аддоны.
Плюс, при наличии XSS уязвимости, твой реферер легко подменится каким нибудь курлом и сессайди будет на руках для осуществления успешного запроса.
Да, понимаю что это другая проблема. Но получается что защита от CSRF на реферерах не самодостаточна - ещё один минус в копилку реферера...
И да, не всегда хакер имея sessid на руках захочет это сделать своими руками.
Что бы например не попасть в лог или тупо не упереться на ограниченное пользование по IP. Поэтому даже если увели sessid, не факт что проблемы будут создавать своими руками посему даже в таком случае CSRF имеет место быть.
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
DeepVarvar пишет:
Кстати, а як ты определишь что тебя запросили с ифрейма, а? ))
А зачем мне это определять? Ты же когда срц у айфрейма указываешь пишешь адрес, а токен не знаешь, поэтому и выясню отдавать тебе форму или нет)
DeepVarvar пишет:
В твоем варианте вообще не надо кликать.
Угу, потому что бесполезно
DeepVarvar пишет:
Лучше покажи как ты, проведя XSS, с помощью жс получишь куки чужого домена ))
Если правильно понял вопрос, то достаточно поставить картинку в DOM а её сорц указать на свой сервер + document.cookie
Сори, мне пора) Если что пиши, думаю к завтрашнему вечерку отпишусь (Добавление)
DeepVarvar пишет:
Значит жертву уже поимели по полной программе -- получен непосредственный доступ к ПК.
Забыл прокомментить
это вполне может быть инет клуб или другое общаковое заведение
Мелкий
Отправлено: 25 Ноября, 2015 - 00:16:05
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
чтобы спереть токен надо открыть форму. Раз форма уже открыта, то с неё запрос отправлять и удобнее - значит и реферер тут же будет передан корректный.
Различие одно: не пришёл токен - это гарантированно ошибка. Не пришёл реферер - это допустимое поведение клиента. Убить реферер - просто. Поэтому от CSRF используют токены. Что, конечно, не мешает при желании проверять и реферер. Но его может штатно не быть.
----- PostgreSQL DBA
DeepVarvar
Отправлено: 25 Ноября, 2015 - 09:02:31
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
teddy пишет:
Угу, потому что бесполезно
Нет же. Ну ок, у тебя тоже один раз кликнуть надо для получения токена.
teddy пишет:
поставить картинку в DOM а её сорц указать на свой сервер + document.cookie
Куку чужого домена браузер не отправит на левый сорц.
На своем сайте ты имеешь доступ только к своим кукам.
teddy пишет:
это вполне может быть инет клуб или другое общаковое заведение
Или тролль в гостях у жертвы, или жертва потеряла смарт, или...
От этого уже не спасет ни мой реферер, ни твой токен.
Мелкий пишет:
значит и реферер тут же будет передан корректный
И токен тоже.
Мелкий пишет:
Не пришёл реферер - это допустимое поведение клиента
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
DeepVarvar пишет:
И токен тоже.
Да.
DeepVarvar пишет:
Это смотря в каком контексте рассматривать.
В любом. Отсутствие реферера - допустимое поведение клиента. RFC 2616
DeepVarvar пишет:
Убить === подменить.
Нет. Убить === отключить его передачу (во всяком случае для этого запроса)
подменить === убедить клиента реферер передать, но другой
----- PostgreSQL DBA
teddy
Отправлено: 25 Ноября, 2015 - 19:31:35
Участник
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
DeepVarvar пишет:
Ну ок, у тебя тоже один раз кликнуть надо для получения токена.
Кликнуть куда? Что мешает при не валидном запросе не подставлять токен никуда?
DeepVarvar пишет:
Куку чужого домена браузер не отправит на левый сорц.
На своем сайте ты имеешь доступ только к своим кукам.
Ну да. Видимо я тебя неверно понял. Я вообще то говорил про XSS уязвимость на сайте жертвы а не на левом сайте и то только если нет httponly или есть но браузер допотопный
DeepVarvar пишет:
Или тролль в гостях у жертвы, или жертва потеряла смарт, или...
От этого уже не спасет ни мой реферер, ни твой токен.
Сегодня очень много общественных мест где есть выход в интернет и машины в таких местах зачастую общие. Те же инет клубы.
Покинул форум
Сообщений всего: 378
Дата рег-ции: Сент. 2014
Помог: 10 раз(а)
[+]
У каждого решения проблемы есть не только недостатки, но и стоимость решения. Если стоимость двух разных решений сопоставима, а недостатков у какой-то меньше - ее и нужно выбирать.
Токен тут имеет преимущество. При нормальной архитектуре кода (которая никак не связана с тем - нужен нам токен или нет) внедрение токена не сложнее проверки referer.
Но при этом мы не отсеиваем людей, у которых по каким-то причинам пустой referer.
Т.е. стоимость реализации сопоставима, но недостатков меньше.
Если у вас говнокод, в который вы просто не можете адекватно изменить, что бы добавить поддержку токенов... ну referer пойдет.
----- self-banned
teddy
Отправлено: 25 Ноября, 2015 - 19:49:33
Участник
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
DeepVarvar пишет:
Как он будет невалидным если ты запрос из ифрейма никак не отличишь от обычного.
А не нужно отличать, нет валидного токена в запросе - нет валидного токена в ответе
все просто
DeepVarvar пишет:
Я вообще-то в самом-самом начале говорил что хсс это совсем другой вопрос.
Так никто не спорит Только защищаться от CSRF с помощью защиты от XSS немного странно : )))
Мелкий
Отправлено: 25 Ноября, 2015 - 20:17:37
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
DeepVarvar пишет:
Но и отсутствие токена -- допустимое поведение клиента.
Как раз-таки категоричное нет. Нет токена или токен неверен - недопустимая ошибка поведения клиента, при этом, не противоречащая каким-либо RFC. Запрошенное действие не выполнять, открыть вновь форму с соответствующим сообщением пользователю мол "попробуйте ещё раз".
----- PostgreSQL DBA
DeepVarvar
Отправлено: 25 Ноября, 2015 - 20:21:41
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
teddy пишет:
нет валидного токена в запросе - нет валидного токена в ответе
Но ведь где-то должен выдаваться первичный валидный токен, иначе ты не отследишь токеновый след ))
teddy пишет:
защищаться от CSRF с помощью защиты от XSS немного странно
Не пори чушь. Каким боком реферер спасает от XSS?
MiksIr пишет:
бла-бла-бла ... если у вас говнокод
С таким подходом у нас разговора не выйдет.
Ты тред с самого начала осилил хотябы? (Добавление)
Мелкий пишет:
недопустимая ошибка поведения клиента
Надо определиться что есть "клиент" -- программа-браузер или тело, тыкающее кнопы.
Мелкий пишет:
открыть вновь форму с соответствующим сообщением
И загенерить токен, да? Иначе будет как у teddy -- токена нет? ПНХ! Иди получай в момент авторизации или я хз где, но в единственном месте.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.