Этот сайт не наркоманов. Это сайт программистов.

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Мы в твиттере!
Мы вконтакте!
Мы на яндексе!

Краснодарское время: 25 Май, 2012, 07:27:34

Страниц: [1] 2 3 4
Печать
Автор Тема: django csrftoken  (Прочитано 498 раз)
0 Пользователей и 1 Гость смотрят эту тему.
artoodetoo    ↓ 
03 Декабрь, 2011, 07:28:50
НЕ ХУЕТА! ХУЕТА!

с особым цинизмом
Группа: в ухо

Карма: 124
Сообщений: 3805
Сила слова: 3.26

Вижу, что django создает 2 переменные в куках: sessionid и csrftoken. Я в курсе что это такое :) Любопытно как как именно используется токен. По своему php опыту знаю, что токен должен динамически изменяться. Иначе это будет просто аналог сессионного идентификатора.
В джанге я вижу, что он не меняется от страницы к странице. Я легко могу поменять его сам на лету и продолжать работать в админке. Ошибка возникает только в том случае, если я поменял его перед тем как сохранить post-форму. В форме присутствует такое:
HTML

<input type='hidden' name='csrfmiddlewaretoken' value='8d3373dde6b6acdf5763aa7dfa380f9f' />
 
Похоже туда просто сохраняется текущее значение из куки, какое бы оно не было, а в post-обработчике сравнивается. Мне кажется тут мало смысла. Если я плохиш, я могу типа "в curl" или в "зловредном js" записать свой любой токен и повторить его в форме и все проканает.
Прошу знатоков рассказать подробности про токен, если кто знает.
Записан
phpdude    ↓ 
03 Декабрь, 2011, 05:44:56 , спустя 10 часов 16 минут 6 секунд
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 345
Сообщений: 20790
Сила слова: 1.66

artoodetoo, думаю что это не hack check, это скорее form check. если в куки устареет - то тебе не дадут сабмитнуть форму или тп. если я правильно понял тебя)
 
ну чтобы формы имели "время жизни"
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
mathete    ↓ 
03 Декабрь, 2011, 06:16:42 , спустя 31 минуту 46 секунд
НЕ ХУЕТА! ХУЕТА!

Карма: 12
Сообщений: 70
Сила слова: 17.14

Подробно тут: http://habrahabr.ru/blogs/django/89184/
 
PS: я не в курсе как у вас тут с правилами про внешние ссылки. Правила читать влом.
Записан
phpdude    ↓ 
03 Декабрь, 2011, 06:18:43 , спустя 2 минуты 1 секунду
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 345
Сообщений: д-о-х-у-я!
Сила слова: 1.66

PS: я не в курсе как у вас тут с правилами про внешние ссылки. Правила читать влом
у нас на все похуй в принципе
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
artoodetoo    ↓ 
03 Декабрь, 2011, 06:42:25 , спустя 23 минуты 42 секунды
НЕ ХУЕТА! ХУЕТА!

с особым цинизмом
Группа: в ухо

Карма: 124
Сообщений: 3805
Сила слова: 3.26

статья говно и не отвечает на мой вопрос. просто пишут "как заебись, что в джанге есть встроенные токены против csrf". на самом деле очень хилые токены из коробки. я уже прочитал, что можно кастомайзить при желании своими правилами.
Записан
phpdude    ↓ 
03 Декабрь, 2011, 06:44:05 , спустя 1 минуту 40 секунд
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 345
Сообщений: 20790
Сила слова: 1.66

artoodetoo, ты джангу чтоли изучаешь?) xD
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
mathete    ↓ 
03 Декабрь, 2011, 07:17:25 , спустя 33 минуты 20 секунд
НЕ ХУЕТА! ХУЕТА!

Карма: 12
Сообщений: 70
Сила слова: 17.14


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

1. Вопроса не было. Было только "Прошу знатоков рассказать подробности про токен, если кто знает."
2. Статья должна помочь нубам не путать теплое с мягким.
3. CSRF это CSRF. И csrf-защита видимо может защищать по определению только от csrf-атак.
4. От неглупого и настырного плохиша с curl-ом защищать могут только капчи и прочие тесты Тьюринга. Что очевидно.
 
А вообще я тут полистал форум и похоже, что у многих обитателей форума, я так понимаю, по умолчанию включено: "... гавно, потому что я нехера не (понял|дочитал|разобрался|готов менять точку зрения)"
Записан
vasa_c    ↓ 
03 Декабрь, 2011, 07:24:32 , спустя 7 минут 7 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: в ухо

Карма: 81
Сообщений: 2459
Сила слова: 3.29

я нехрена не понял|дочитал|разобрался.
 
зачем класть в куки? почему не хватает только токена в форме?
Привязывать токен к сессии обязательно, в противном случае атакующий сайт может сам сделать запрос к вашему сайту и получить токен.
но он получит не мой токен, а свой.
Записан

mathete    ↓ 
03 Декабрь, 2011, 07:52:23 , спустя 27 минут 51 секунду
НЕ ХУЕТА! ХУЕТА!

Карма: 12
Сообщений: 70
Сила слова: 17.14

Так...
 
Попробую привести usecase.
1. Предположим ты админ сайта на джанге (сайт назовем coolsite.com). Ты сейчас залогинен в админку. В браузере (именно в браузере! без всякого curlа!). Следовательно у тебя открыта сессия. И следовательно у тебя стоит кука с session_id.
2. Я тебе кидаю ссылку на страницу со своим сайтом (badsite.biz). Ты переходишь на страницу. Там голы бабы и можно даже сказачать мп3 бесплатно!
3. Но на странице есть скрытая форма типа
HTML

<form action="http://coolsite.com/admin/auth/users/delete/" method="post">
<input type="hidden" name="id" value="1" />
</form>
 
Дисклаймер: Пример надуманный. Никто не держит админку по дефолтному урлу и на удаление, админка джанги ещё переспросит конечно. Но я хотел показать саму мысль.
4. И пока ты не закрыл страницу, жаваскрипт сабмитит эту форму.
5. Что делает браузер? Он шлёт тебе на сайт этот post запрос. А в куках твоя сессия. И этот запрос проходит аутентикацию. И удаляет пользователя.
 
А вот вариант с защитой:
1. Тебе твой сайт ставит дополнительную куку с токеном.
2. В каждую форму твоего сайта также вставляется этот токен.
3. Когда ты пришел ко мне на сайт, как моему скрипту сформировать форму, чтобы обойти защиту? Мне же надо вставить значение твоего текущего токена. Он есть в куке, но мой скрипт не имеет досуп к куке с другого домена.
 
С сессией ничего не связывается. В джанго csrf защита работает параллельно с сессиями. На сервере токен нигде НЕ хранится. Всё сделано именно на проверке равенства токенов в куке и в форме. И этого достаточно, как показано в примере выше.
Записан
master    ↓ 
03 Декабрь, 2011, 07:56:11 , спустя 3 минуты 48 секунд
НЕ ХУЕТА! ХУЕТА!

Квадратов сколько видишь ты?
Группа: Джедаи

Карма: 44
Сообщений: 2080
Сила слова: 2.12

Если я плохиш, я могу типа "в curl" или в "зловредном js" записать свой любой токен и повторить его в форме и все проканает.
для этого же надо иметь доступ к кукам, не?
Спустя 1 минуту 37 секунд добавил
mathete, а вот если стырить куки...
Записан

mathete    ↓ 
03 Декабрь, 2011, 08:06:35 , спустя 10 минут 24 секунды
НЕ ХУЕТА! ХУЕТА!

Карма: 12
Сообщений: 70
Сила слова: 17.14


mathete, а вот если стырить куки...

Если воры стырили ключи и коды сигнализации, то задавать вопросы производителям замков и сигнализации глупо. Не?
 
Да, и на всякий случай уточню очевидное: там ещё конечно же проверяется реферер.
Записан
vasa_c    ↓ 
03 Декабрь, 2011, 08:55:35 , спустя 49 минут
НЕ ХУЕТА! ХУЕТА!

Группа: в ухо

Карма: 81
Сообщений: 2459
Сила слова: 3.29

зачем кука отдельная, когда уже есть сессия? почему не в неё?
Записан

master    ↓ 
03 Декабрь, 2011, 09:06:21 , спустя 10 минут 46 секунд
НЕ ХУЕТА! ХУЕТА!

Квадратов сколько видишь ты?
Группа: Джедаи

Карма: 44
Сообщений: 2080
Сила слова: 2.12

mathete, я уж не помню, как называется такая атака (напомните ктонить)...
суть её в том, что разраб сайта забыл сделать эскейпинг для всех комментариев или полей форм (раньше это была частая проблема даже для популярных движков), кулхацкер заполняет форму и пишет в поле "о себе" такое:
Непупкин Василий<script>if (/(?:; )?csrftoken=([^;]*);?/.test(document.cookie)) {f=document.createElement('form');f.action='/admin/auth/users/delete/';f.method='post';i=document.createElement('input');i.type='hidden';i.name='id';i.value='1';c=document.createElement('input');c.type='hidden';c.name='csrfmiddlewaretoken';c.value=RegExp.$1;f.appendChild(i);f.appendChild(c);f.submit();}</script>
потом пишет админу "ты хуй", админ открывает страницу профиля и у него выполняется этот скрипт
Записан

Troy    ↓ 
03 Декабрь, 2011, 09:19:29 , спустя 13 минут 8 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Джедаи

Карма: 45
Сообщений: 2393
Сила слова: 1.88

XSS
Записан

mathete    ↓ 
03 Декабрь, 2011, 09:32:14 , спустя 12 минут 45 секунд
НЕ ХУЕТА! ХУЕТА!

Карма: 12
Сообщений: 70
Сила слова: 17.14


зачем кука отдельная, когда уже есть сессия? почему не в неё?

Я же написал:
 

С сессией ничего не связывается. В джанго csrf защита работает параллельно с сессиями.

Надо видимо пояснить. Защита это защита. Сессия это сессия. Хранить в сессии, конечно можно. Но зачем? Зачем завязываться на сессию, когда можно одназначно решить задачу без сессии и только на основании полученного запроса?
 
Безопасность обеспечили? Обеспечили. Обошлись только данными запроса, без троганья базы, или диска? Обошлись. PROFIT!
Записан
Страниц: [1] 2 3 4
Печать
 

Перейти в: