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]

 PHP.SU

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


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

> Без описания
DeepVarvar Супермодератор
Отправлено: 24 Ноября, 2015 - 02:58:06
Post Id



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


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


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




teddy пишет:
против замазанного айфрейма реферер бессилен
Токен тоже.
teddy пишет:
Этого токена не будет в POST форме
Какая разница куда ты (пост формы, экшн формы, срц фрейма) распихиваешь параметры?
Токен всеравно будет где-то в контексте запроса.
teddy пишет:
одноразовый/многоразовый

Да хоть полуразовый.
teddy пишет:
заголовки - произвольный текст
А токен это (само|недо|пере)произвольный текст?

teddy пишет:
дополнительно шаманить
Не надо ничего шаманить на стороне приложения кроме реферера.
Все остальное шаманицца в конфиге сервера: корс + фреймопшнс (ну ладно, можно и это впилить в приложение ради бомжей селящихся на шаредах)

Кстати, что мне помешает написать проверку реферера и для подгрузки списка пользаков?
(для меня это две строки кода в экшне, а в новой версии я впилю это сразу в базовую форму)
Социальная инженерия сразу обсерится, т.к. придется мазанную форму сначала бросить просто в админку, затем заставить кликнуть на список пользаков, а потом уже что-то делать с пользаком ))

Ну и чтоб ты понимал (ну вдруг ты не понял о чем я): http://www[dot]deep-cms[dot]ru/api/sourc[dot][dot][dot]est[dot]html#312-348
Проверка там идет в два этапа:

1) проверяет только домен
2) проверяет путь от корня сайта, где правила проверки можно задавать и регуляркой

Вызывается оно в экшне удаления пользака, например, типа так:
PHP:
скопировать код в буфер обмена
  1. $adminToolsLink = app::config()->site->admin_tools_link;
  2. request::validateReferer($adminToolsLink . '/users');

Т.е. эффект будет только если мы были до этого на странице списка пользаков.
А вот сохранение пользака:
PHP:
скопировать код в буфер обмена
  1. if ($target === null) {
  2.     request::validateReferer($adminToolsLink . '/users/create');
  3. } else {
  4.     request::validateReferer($adminToolsLink . '/users/edit\?id=\d+', true);
  5. }
Понимаешь, да? Ну вот.
 
 Top
teddy
Отправлено: 24 Ноября, 2015 - 20:29:55
Post Id


Участник


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


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




DeepVarvar пишет:
Токен тоже.

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

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

В отличии от реферера, нужно быть гадалкой что бы его угадать. Ну или уметь его украсть. Тут уже все зависит уровня безопасности приложения или дурости юзера.
А реферер - в большинстве CSRF атак обычно известен заранее. Разница же очевидна.
DeepVarvar пишет:
Понимаешь, да?

Да. А ещё я понимаю, что сервер не должен зависеть от клиента в плане безопасности.
Никогда не знаешь какие фичи/дыры/при обновлении браузера или просто казалось бы "безобидные настройки" отправляемых заголовков есть в наличии.
 
 Top
DeepVarvar Супермодератор
Отправлено: 24 Ноября, 2015 - 22:09:48
Post Id



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


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


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




teddy пишет:
Страницу ты подгрузить сможешь из соображений юзер-френдли, но форму или сам токен я тебе просто не отдам
Согласись это равнозначно что:
Страницу ты подгрузить сможешь из соображений юзер-френдли, и даже форму отправишь, но что-то изменить, если мне не понравится реферер, я тебе просто не дам.
teddy пишет:
Эти корсы и фреймопшены
Первый прекрасно везде работает для аякса, второй -- для тех кто умеет, а остальные подтянутся позже.
Но речь не про них.
teddy пишет:
про наличие уязвимости в конечном счете
Токен аналогично уязвим.
teddy пишет:
А реферер - в большинстве CSRF атак обычно известен заранее
И что это дает, когда его не получится подменить?
Ну или расскажи мне историю успеха подмены реферера у аякса, формы, ссылки или фрейма.
teddy пишет:
сервер не должен зависеть от клиента в плане безопасности
Тогда за каким лядом ты прикручиваешь токены?
Нет, не так.
С чего ты взял что есть хоть какая-то клиентозависимая разница между реферером (который даже прописан в спецификации) и неспековым велосипедом (который еще и работает на более высоком уровне) в виде токенов?
Если в спеках сказано -- реферер, значит я в праве его ожидать, и слать лесом если мне что-то не понравилось.
А в вашем случае -- велосипеды, тысячи их.
teddy пишет:
безобидные настройки
ССЗБ.

Но, честное слово.
Если бы я разрабатывал что-то типа банковских платежей, то я бы применил все известные мне методы валидации, включая экзотику типа етагов, маустрекинга и ванпикселей.

Однако в этой вот дискуссии я повторю в сотый раз -- реферер, это все что нужно, т.к. он проще, а эффективность у него такая-же как и у токена.
 
 Top
teddy
Отправлено: 24 Ноября, 2015 - 22:42:03
Post Id


Участник


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


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




DeepVarvar пишет:
Страницу ты подгрузить сможешь из соображений юзер-френдли, и даже форму отправишь, но что-то изменить, если мне не понравится реферер, я тебе просто не дам.

А реферер тебе понравится Улыбка Сразу после первого клика по какой нибудь ссылке в айфрейме. Да, это сложно провернуть, но факт остается фактом, это осуществимо технически.
Если хорошенько покопаться, может ещё варианты найдутся.
Например если кто то покопается в настройках/плагинах браузера жертвы, может поставить постоянный реферер. Надо глянуть что там предлагают конфиги и аддоны.

Плюс, при наличии XSS уязвимости, твой реферер легко подменится каким нибудь курлом и сессайди будет на руках для осуществления успешного запроса.
Да, понимаю что это другая проблема. Но получается что защита от CSRF на реферерах не самодостаточна - ещё один минус в копилку реферера...

И да, не всегда хакер имея sessid на руках захочет это сделать своими руками.
Что бы например не попасть в лог или тупо не упереться на ограниченное пользование по IP. Поэтому даже если увели sessid, не факт что проблемы будут создавать своими руками посему даже в таком случае CSRF имеет место быть.

Как то так Улыбка

(Отредактировано автором: 24 Ноября, 2015 - 22:46:23)

 
 Top
DeepVarvar Супермодератор
Отправлено: 24 Ноября, 2015 - 23:11:04
Post Id



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


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


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




teddy пишет:
но форму или сам токен я тебе просто не отдам
Кстати, а як ты определишь что тебя запросили с ифрейма, а? ))
teddy пишет:
Сразу после первого клика по какой нибудь ссылке в айфрейме
В твоем варианте вообще не надо кликать.
teddy пишет:
если кто то покопается в настройках/плагинах браузера жертвы
Значит жертву уже поимели по полной программе -- получен непосредственный доступ к ПК.
Мы тут уже никакими припарками не поможем.
teddy пишет:
при наличии XSS уязвимости, твой реферер легко подменится каким нибудь курлом и сессайди будет на руках для осуществления успешного запроса
Причем тут курлы-шмурлы?
Опустим, не пугай ежа.
Лучше покажи как ты, проведя XSS, с помощью жс получишь куки чужого домена ))
teddy пишет:
если увели sessid
Значит там был митм, т.к. через XSS куки чужого домена не увести.

teddy пишет:
Как то так
Из пустого в порожнее.
 
 Top
teddy
Отправлено: 24 Ноября, 2015 - 23:31:32
Post Id


Участник


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


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




DeepVarvar пишет:
Кстати, а як ты определишь что тебя запросили с ифрейма, а? ))

А зачем мне это определять? Улыбка Ты же когда срц у айфрейма указываешь пишешь адрес, а токен не знаешь, поэтому и выясню отдавать тебе форму или нет)
DeepVarvar пишет:
В твоем варианте вообще не надо кликать.

Угу, потому что бесполезно Улыбка
DeepVarvar пишет:
Лучше покажи как ты, проведя XSS, с помощью жс получишь куки чужого домена ))

Если правильно понял вопрос, то достаточно поставить картинку в DOM а её сорц указать на свой сервер + document.cookie

Сори, мне пора) Если что пиши, думаю к завтрашнему вечерку отпишусь
(Добавление)
DeepVarvar пишет:
Значит жертву уже поимели по полной программе -- получен непосредственный доступ к ПК.

Забыл прокомментить
это вполне может быть инет клуб или другое общаковое заведение
 
 Top
Мелкий Супермодератор
Отправлено: 25 Ноября, 2015 - 00:16:05
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




чтобы спереть токен надо открыть форму. Раз форма уже открыта, то с неё запрос отправлять и удобнее - значит и реферер тут же будет передан корректный.

Различие одно: не пришёл токен - это гарантированно ошибка. Не пришёл реферер - это допустимое поведение клиента. Убить реферер - просто. Поэтому от CSRF используют токены. Что, конечно, не мешает при желании проверять и реферер. Но его может штатно не быть.


-----
PostgreSQL DBA
 
 Top
DeepVarvar Супермодератор
Отправлено: 25 Ноября, 2015 - 09:02:31
Post Id



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


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


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




teddy пишет:
Угу, потому что бесполезно
Нет же. Ну ок, у тебя тоже один раз кликнуть надо для получения токена.
teddy пишет:
поставить картинку в DOM а её сорц указать на свой сервер + document.cookie
Куку чужого домена браузер не отправит на левый сорц.
На своем сайте ты имеешь доступ только к своим кукам.
teddy пишет:
это вполне может быть инет клуб или другое общаковое заведение
Или тролль в гостях у жертвы, или жертва потеряла смарт, или...
От этого уже не спасет ни мой реферер, ни твой токен.
Мелкий пишет:
значит и реферер тут же будет передан корректный
И токен тоже.
Мелкий пишет:
Не пришёл реферер - это допустимое поведение клиента
Это смотря в каком контексте рассматривать.
Мелкий пишет:
Убить реферер - просто
Убить === подменить.
 
 Top
Мелкий Супермодератор
Отправлено: 25 Ноября, 2015 - 12:28:21
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




DeepVarvar пишет:
И токен тоже.

Да.

DeepVarvar пишет:
Это смотря в каком контексте рассматривать.

В любом. Отсутствие реферера - допустимое поведение клиента. RFC 2616

DeepVarvar пишет:
Убить === подменить.

Нет. Убить === отключить его передачу (во всяком случае для этого запроса)
подменить === убедить клиента реферер передать, но другой


-----
PostgreSQL DBA
 
 Top
teddy
Отправлено: 25 Ноября, 2015 - 19:31:35
Post Id


Участник


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


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




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

Ну да. Видимо я тебя неверно понял. Я вообще то говорил про XSS уязвимость на сайте жертвы а не на левом сайте и то только если нет httponly или есть но браузер допотопный
DeepVarvar пишет:
Или тролль в гостях у жертвы, или жертва потеряла смарт, или...
От этого уже не спасет ни мой реферер, ни твой токен.

Сегодня очень много общественных мест где есть выход в интернет и машины в таких местах зачастую общие. Те же инет клубы.

(Отредактировано автором: 25 Ноября, 2015 - 19:36:08)

 
 Top
DeepVarvar Супермодератор
Отправлено: 25 Ноября, 2015 - 19:33:33
Post Id



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


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


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




Мелкий пишет:
Отсутствие реферера - допустимое поведение клиента
Но и отсутствие токена -- допустимое поведение клиента.
(Добавление)
teddy пишет:
Что мешает при не валидном запросе не подставлять токен никуда?
Как он будет невалидным если ты запрос из ифрейма никак не отличишь от обычного.
teddy пишет:
Я вообще то говорил про XSS
Я вообще-то в самом-самом начале говорил что хсс это совсем другой вопрос.
teddy пишет:
много общественных мест
ССЗБ.
 
 Top
MiksIr
Отправлено: 25 Ноября, 2015 - 19:40:41
Post Id


Забанен


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


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

[+]


У каждого решения проблемы есть не только недостатки, но и стоимость решения. Если стоимость двух разных решений сопоставима, а недостатков у какой-то меньше - ее и нужно выбирать.

Токен тут имеет преимущество. При нормальной архитектуре кода (которая никак не связана с тем - нужен нам токен или нет) внедрение токена не сложнее проверки referer.
Но при этом мы не отсеиваем людей, у которых по каким-то причинам пустой referer.
Т.е. стоимость реализации сопоставима, но недостатков меньше.

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


-----
self-banned
 
 Top
teddy
Отправлено: 25 Ноября, 2015 - 19:49:33
Post Id


Участник


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


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




DeepVarvar пишет:
Как он будет невалидным если ты запрос из ифрейма никак не отличишь от обычного.

А не нужно отличать, нет валидного токена в запросе - нет валидного токена в ответе
все просто
DeepVarvar пишет:
Я вообще-то в самом-самом начале говорил что хсс это совсем другой вопрос.

Так никто не спорит Улыбка Только защищаться от CSRF с помощью защиты от XSS немного странно : )))
 
 Top
Мелкий Супермодератор
Отправлено: 25 Ноября, 2015 - 20:17:37
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




DeepVarvar пишет:
Но и отсутствие токена -- допустимое поведение клиента.

Как раз-таки категоричное нет. Нет токена или токен неверен - недопустимая ошибка поведения клиента, при этом, не противоречащая каким-либо RFC. Запрошенное действие не выполнять, открыть вновь форму с соответствующим сообщением пользователю мол "попробуйте ещё раз".


-----
PostgreSQL DBA
 
 Top
DeepVarvar Супермодератор
Отправлено: 25 Ноября, 2015 - 20:21:41
Post Id



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


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


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




teddy пишет:
нет валидного токена в запросе - нет валидного токена в ответе
Но ведь где-то должен выдаваться первичный валидный токен, иначе ты не отследишь токеновый след ))
teddy пишет:
защищаться от CSRF с помощью защиты от XSS немного странно
Не пори чушь. Каким боком реферер спасает от XSS?
MiksIr пишет:
бла-бла-бла ... если у вас говнокод
С таким подходом у нас разговора не выйдет.
Ты тред с самого начала осилил хотябы?
(Добавление)
Мелкий пишет:
недопустимая ошибка поведения клиента
Надо определиться что есть "клиент" -- программа-браузер или тело, тыкающее кнопы.
Мелкий пишет:
открыть вновь форму с соответствующим сообщением
И загенерить токен, да? Иначе будет как у teddy -- токена нет? ПНХ! Иди получай в момент авторизации или я хз где, но в единственном месте.
 
 Top
Страниц (6): « 1 2 [3] 4 5 6 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« HTTP и PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB