За последние 24 часа нас посетили 17979 программистов и 1588 роботов. Сейчас ищут 1362 программиста ...

CSRF-токен: один на сессию или новый на каждый запрос

Тема в разделе "Решения, алгоритмы", создана пользователем Deonis, 29 ноя 2017.

  1. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @Deonis, при том что GET не защищен и через него выдается страница с формами и токенами.
     
  2. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Вообще плюсы всеравно есть. Время жизни токена 1 запрос. Соответственно сделать много плохо не успеешь.

    В нашем случае так же обстоит вопрос с логином и паролем.:D. Если его узнают не важно поменял ты его или нет, узнают еще раз как узнали в предыдущий.

    Вообще поэтому я и писал.
    --- Добавлено ---
    @Maputo, токен нужно слать POST запросом, иначе смысла вообще в нем нету. )
     
  3. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @mahmuzar, а POST-запрос для получения токена посылает скрипт, который загружается с помощью GET-запроса? Где-то в этой цепочке всегда будет не защищенный GET. И тогда про токен можно смело сказать, что
     
  4. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Все же, ты не до конца понимаешь, о чем идет речь и как это работает.
     
  5. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @Fell-x27, пользователь заходит на сторонний сайт, с которого отправляются от его имени запросы. Так?
     
  6. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Так. А теперь скажи, при чем тут геты, если через них, у хорошего разработчика, осуществляются только read-only запросы?
     
  7. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Так для того и использовать, чтобы прочитать скрытое поле в форме.
     
  8. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Как? Чье поле ты читать собрался? Его значение специфичное для каждого пользователя. Если ты сделаешь CSRF на чтение, то, лично ТЫ, ничего не получишь. Жертва выполнит твой гет и она же получит ответ :)

    В это суть CSRF-атаки. Жертва все делает сама. Атакующий не принимает в ней прямого участия. По этому CSRF-атака на read-only GET-ы не имеет смысла как таковая.
     
  9. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Я так понимаю жертва - это браузер жертвы? Если гет приходит в него - его можно спарсить ява-скриптом. Или я опять не в ту сторону думаю?
     
  10. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    @Maputo тут был простой пример, что поначалу для удаления аккаунта в ВК достаточно было перейти по ссылке. Удалить можно только свой аккаунт. И ты пострадаешь, если кто-то тебе даст такую ссылку и ты по ней перейдешь.
    А если написать
    HTML:
    1. <img src="ссылка-с-действием">
    и вставить на посещаемый сайт, например типа картинку в форум, то это действие будет выполняться у всех, кто будет просматривать страницу.
    Потому что их браузер отправит запрос.
    Это частный случай CSRF.
     
  11. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @[vs], это все понятно. Действие и должно выполняться на стороне клиента. Но почему я не могу выполнить гет запрос и принять данные с помощью яваскрипт?
     
  12. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    @Maputo потому что это запретили разработчики Netscape Navigator в 1995 году, а в 2011 правила same-origin policy вошли в RFC 6454
     
  13. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @[vs], тогда почему я могу выполнить пост-запрос?
     
  14. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    @Maputo куда именно?
     
  15. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @[vs], я так думаю все уже устали от этой темы) Лично я уже определился с токенами и не хочу никого вводить в заблуждение.
     
  16. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    я не устал. продолжайте)
     
  17. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.793
    Симпатии:
    1.330
    Адрес:
    Лень
    форма посылает пост запрос с токеном.
    левый сайт не сможет послать пост запрос, не зная токена. Тупо парсить будет ? у каждого своя сессия ( свой проверочный токен )
     
  18. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Есть ли смысл в продолжении. Пусть обсуждение и не переросло в полный холивар, но надеялся я на немного другое, например, на то что будет дана некая оценка, что-то в этом роде:
    1. При одном токене на сессию, при условиях А, Б и В, есть риски Г, Д и Е соответственно.
    Со свое стороны, я бы мог прикинуть, что, например, условия А и Б я могу проконтролировать, а условие В - нет и риск Е остаётся висеть "дамокловым мечом".
    2. При одноразовом токене риски уменьшаются, но возникает ряд других проблем Ж, З и И
    И в этом случае, можно было бы прикинуть хрен к носу и понять, с чем могу столкнуться.

    Однако, несколько полезных выводов я всё-таки для себя сделал.
     
    #68 Deonis, 2 дек 2017
    Последнее редактирование: 2 дек 2017
  19. AlexProg

    AlexProg Активный пользователь

    С нами с:
    13 май 2014
    Сообщения:
    320
    Симпатии:
    7
    Парни, использую в форме CSRF токен. Живет минуту +-. Использую в формах (регистрация, авторизация и т.д.) Каждый запрос, новый токен.
    Вопрос: Правильно ли я делаю? Есть ли от этого смысл?
     
  20. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Да, нормально, там главный посыл, что без валидного токена запрос не проходил, чтобы с другого сайта нельзя было выполнить запрос например на изменение пароля, выход, перевод денег и т. д.
     
    AlexProg нравится это.
  21. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Открой три страницы, посиди минуту на одной, минуту на другой. Поплюйся от ошибок, связанных с протуханием токенов, сделай выводы.
     
    AlexProg, Deonis и denis01 нравится это.
  22. AlexProg

    AlexProg Активный пользователь

    С нами с:
    13 май 2014
    Сообщения:
    320
    Симпатии:
    7
    Все изи :) Нужно успевать, ибо нех ))
     
  23. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Дада, ты пользователю живому это скажи по успевать ибо нех. Вот я щас на форуме 12 страниц открыл. Расслабона вечернего ради. В каждой есть форма ввода. Мне нужно за минуту все 12 прочитать, и, по возможности, успеть отписаться везде? По твоей логике так выходит? :)
    Ты для пользователя делаешь сайт.

    Все эти вот протухающие за минуту токены - это никому не нужный излишний геморрой, серьезно. Токен - это чугунный монолитный замок на воротах. А эти все припарки - это гирлянда чеснока, чтобы вампиров от него отпугивать, ну мало ли. А еще живая мышь, чтобы отпугивать слонов. На всякий случай. И моча скунса в колбочке, которая разбивается от удара молоточком, который опрокидывается и бьет по колбе, если тронуть волосок, приклеенный к связке чеснока. Тоже на всякий случай. Ну а чо, хуже не будет. УХХХХ, ЗАЩЩЩИТИЩЩЩА.

    И пофигу, что этот колхоз - не более, чем излишнее усложнение системы, основным компонентом которой является чугунный монолитный замок, который что с этими припарками, что без них хрен снимешь.
     
    AlexProg, Deonis и romach нравится это.