killer8080
13.06.2013 - 15:33
Цитата (killer8080 @ 13.06.2013 - 12:42) |
Цитата (zvezda_t @ 13.06.2013 - 11:15)А можно вместо id_user использовать ip - пользователя? :rolleyes:не стоит, ip адрес может изменится, например при потере связи, это создаст лишние не удобства. |
Пургу сморозил, и никто меня не поправил
можно и ip использовать, и юзер агент и т.п. Но смысла в этом нет, т.к. эти данные известны атакующему.
Цитата (zvezda_t @ 13.06.2013 - 12:54) |
а почему тогда называется одноразовый токен? |
значит кто то делает его одноразовым
смысл в том, что он должен быть уникальным для каждого юзера, и не предсказуем, даже если алгоритм его формирования будет раскрыт. Создавать его динамически, для каждого запроса можно, но с умом, а это лишнее усложнение и нагромождение. Ну например открыл юзер несколько вкладок в браузере, и в каждой из них сгенерился новый токен, соответственно валидным он будет только в последней, в предыдущих вкладках будут устаревшие значения, и запросы от них не пройдут, кому это надо? Можно привязать токен к uri страницы, но тогда будут проблемы например с отправкой пост запросов аяксом, на одной странице может ведь быть несколько форм, отправляемых асинхронно. Так что тут много подводных камней. Более менее оптимальным было бы создавать пару: id формы - токен, минус такого подхода - сессия засоряется кучей лишних элементов
Цитата (zvezda_t @ 13.06.2013 - 12:57) |
и ты пропустил вопрос... ответь пожалуйста:Скажи, пожалуйста, а для авторизации пользователя в системе - тоже нужно использовать токен? |
не имеет смысла, брутфорс и CSRF это совершенно разные вещи.
Цитата (dron4ik @ 13.06.2013 - 13:36) |
Кстати, уж тему то подняли, и сам спрошу)Я на предпоследнем проекте (самопал) использовал такой подход к формам, есть страница формыform.phpи есть обработчик той самой формыobr_to_form.phpТа странице form.php я создаю сессию с динамическим указателем, также скрытое поле с тем же указателем только в обертке хеша (который в свою очередь тоже кахеширован), а на странице обработчика сверяю...if(md5($SESSION['clovo']) != $POST['hiddenfield']) exit;Такой подход вообще от чего нибудь защитит?) |
ну так это и есть защита от CSRF.
zvezda_t
13.06.2013 - 15:49
Цитата |
можно и ip использовать, и юзер агент и т.п. Но смысла в этом нет, т.к. эти данные известны атакующему. |
нет зачем, не просто один ip, а как у тебя ip+microtime. Или это не то?
Цитата |
Ну например открыл юзер несколько вкладок в браузере, и в каждой из них сгенерился новый токен, соответственно валидным он будет только в последней, |
да, об этом я не подумала. значит очищать после создания не нужно...
хм тогда он создается на сессию получается. так?
_____________
Что ты сделал сегодня - для завтра?"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)
killer8080
13.06.2013 - 15:53
Цитата (zvezda_t @ 13.06.2013 - 14:49) |
можно и ip использовать, и юзер агент и т.п. Но смысла в этом нет, т.к. эти данные известны атакующему.нет зачем, не просто один ip, а как у тебя ip+microtime. Или это не то? |
для генерации токена нужно использовать данные, которые знает только сервер, ip адрес таковым не является.
Цитата (zvezda_t @ 13.06.2013 - 14:49) |
да, об этом я не подумала. значит очищать после создания не нужно...хм тогда он создается на сессию получается. так? |
да
zvezda_t
13.06.2013 - 16:00
killer8080 поняла)
Спасибо тебе большое))))) Разобралась
_____________
Что ты сделал сегодня - для завтра?"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)
dron4ik
13.06.2013 - 16:55
Цитата (killer8080 @ 13.06.2013 - 11:33) |
Цитата (dron4ik @ 13.06.2013 - 13:36) | Кстати, уж тему то подняли, и сам спрошу)Я на предпоследнем проекте (самопал) использовал такой подход к формам, есть страница формыform.phpи есть обработчик той самой формыobr_to_form.phpТа странице form.php я создаю сессию с динамическим указателем, также скрытое поле с тем же указателем только в обертке хеша (который в свою очередь тоже кахеширован), а на странице обработчика сверяю...if(md5($SESSION['clovo']) != $POST['hiddenfield']) exit;Такой подход вообще от чего нибудь защитит?) |
ну так это и есть защита от CSRF.
|
killer8080
13.06.2013 - 17:04
Цитата (dron4ik @ 13.06.2013 - 15:55) |
Этого достаточно? |
от межсайтовых запросов - да
zvezda_t
14.06.2013 - 09:22
killer8080
я тут подумала, если в течении сессии токен не изменяется - то это значение же можно прочитать из формы и добавить себе, те злоумышленнику - разве не так?
Токен может защищать только если он одноразовый - разве не так? Один токен - одна форма.
_____________
Что ты сделал сегодня - для завтра?
"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)
glock18
14.06.2013 - 12:10
Цитата (zvezda_t @ 14.06.2013 - 05:22) |
killer8080 я тут подумала, если в течении сессии токен не изменяется - то это значение же можно прочитать из формы и добавить себе, те злоумышленнику - разве не так? Токен может защищать только если он одноразовый - разве не так? Один токен - одна форма. |
От CSRF этот токен защищает. Суть защиты от CSRF в том, что если злоумышленник откроет у себя (вручную или запросом с сервера) форму, то токен там будет сформирован для его сессии, пользователь при сабмите подставной формы будет работать уже с другой сессией, и токен соответственно будет другой, и поэтому подстановка исключена, если генерация токена опирается на какие-то данные о пользователе, которые не известны общественности
zvezda_t
14.06.2013 - 12:56
glock18, опять запуталась...
Смотри, я так поняла, что опасность в том, что если хороший пользователь авторизовался под своим логином и отправляет формочки - на которых например есть спрятанный hidden токен:
<input type="hidden" name="csrf_token" value="<?=$_SESSION['csrf_token']?>" />
все ок.
Вдруг какой-то злоумышленник предлагает нашему хорошему пользователю перейти на свой сайт, а на его сайте есть точно такая же форма - которая отправляется втихоря, так как наш хороший пользователь авторизован, то злоумышленник может этим воспользоваться, если он пока сессия висит - как то прочтет с его формы значение csrf_token = то сможет сделать запрос. или это значение поля hidden не возможно прочитать?
_____________
Что ты сделал сегодня - для завтра?"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)
glock18
14.06.2013 - 13:38
Ну, я ведь выше объяснил. Как этот "доброжелатель" сумеет данные из чужой сессии прочесть?
PS: если ему станет доступна сессия администратора, то он просто-напросто в админку сможет войти
killer8080
14.06.2013 - 13:42
Цитата (zvezda_t @ 14.06.2013 - 11:56) |
если он пока сессия висит - как то прочтет с его формы значение csrf_token = то сможет сделать запрос. или это значение поля hidden не возможно прочитать? |
не сможет он получить доступ к этому значению, если даже он откроет у себя в скрытом ифрейме атакуемую страницу, доступа к контенту ифрейма получить не сможет, тут стоит на страже same origin policy, запрещающее доступ к контенту ифрейма, загруженного с другого домена. В этом собственно и суть. Но тут есть важный момент, на сайте не должно быть XSS уязвимостей, через них можно угнать токен.
Спустя 5 минут, 20 секунд killer8080 написал(а):
Цитата (killer8080 @ 14.06.2013 - 12:42) |
Но тут есть важный момент, на сайте не должно быть XSS уязвимостей, через них можно угнать токен. |
правда при наличии XSS особой необходимости в CSRF уже нет
zvezda_t
14.06.2013 - 13:50
killer8080правильно я поняла, что это поле должно быть в iframe
<iframe>
<input type="hidden" name="csrf_token" value="<?=$_SESSION['csrf_token']?>" />
</iframe>
?
_____________
Что ты сделал сегодня - для завтра?"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)
killer8080
14.06.2013 - 13:54
Цитата (zvezda_t @ 14.06.2013 - 12:50) |
killer8080 правильно я поняла, что это поле должно быть в iframe |
конечно нет, поле может быть только в форме
zvezda_t
14.06.2013 - 14:21
killer8080, но в любом случае его значение из формы прочесть нельзя. да?
_____________
Что ты сделал сегодня - для завтра?
"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)
killer8080
14.06.2013 - 14:31
Цитата (zvezda_t @ 14.06.2013 - 13:21) |
killer8080, но в любом случае его значение из формы прочесть нельзя. да? |
нельзя
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.