За последние 24 часа нас посетили 30767 программистов и 1481 робот. Сейчас ищут 902 программиста ...

Правильно ли я написал защиту от csrf-атак?

Тема в разделе "PHP для новичков", создана пользователем Walk, 28 фев 2018.

  1. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    особенности стандарта подталкивают разработчиков помещать токен прямо в адрес. а потом начинают думать как бы им "защитить самого пользователя от неблагоразумного распространения ключа, в составе URL". неидеальный мир.
     
  2. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Там же написано: "...или в HTTP заголовке запроса". Его, внезапно, можно даже c GET-запросом передать ) Потому - всё равно не понятно.
    --- Добавлено ---
    Код (Javascript):
    1. fetch('https://httpbin.org/delete', { method: 'DELETE', headers: {
    2.     'Token': '123'
    3. }}).then((response) => {
    4.    return response.json()
    5. }).then((result) => {
    6.    console.log(result.headers.Token)
    7. })
     
  3. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    @romach все-таки формирование и разбор заголовков или отправка формы выглядит сложнее, чем переход по ссылке с уникальным токеном, не находишь?
     
  4. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Для этих целей в yii прикольную штуку сделали, я сейчас повторяю это и в проектах на других фреймворках. В ссылку дописывается data-method='post', и через js для таких ссылок при клике создаётся невидимая форма и субмитится. Для пользователя выглядит как ссылка, а на самом деле срабатывает post. Правда, без JS всё отрубится, но у меня ещё ни одного сайта не было, где бы заказчик не требовал столько интерактива, что без js даже менюшку порой не открыть
     
  5. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    @mkramer это интересно. но представь что пользователь захочет поделиться ссылкой - нормальное желание. right click / Copy Link Location / paste. и если в такой ссылке присутствует токен, то он понятное дело перестанет быть секретным.
    вот из-за подобных кейсов я думаю, что одноразовые или прикрепленные к конкретному действию токены дают бОльшую защиту.
     
  6. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    В самой ссылке токена нету, в том-то и прикол. Токен вставляется в скрытую форму, которая отправляется постом, берётся из метатегов. И это для ссылок, которыми никто не будет делиться, типа того же логаута или удаления. Ну а если поделится, на стороне сервера ставится ограничение на этот роут, чтоб только post.
     
    artoodetoo нравится это.
  7. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
  8. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Сложнее в чем? Добавить заголовок к запросу и обработать его на сервере всяко ж проще, чем постоянно ожидать гонку токенов, не?
    --- Добавлено ---
    Его не надо передавать ссылкой, даже добавлять его к ссылке не надо. Надо передавать http-заголовком к запросу. Всё.

    Мне одноразовый токен напоминает знаменитые htmlspecialchars(trim(stripslashes())) и что там ещё есть. Многие делают так, потому что "защита больше", но мы ведь тут взрослые дяди и не надо объяснять, в каких случаях и на каких этапах оно нужно, а в каких вредительство и карго-культ? )
     
  9. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    А как принимать заголовок и зачем его так использовать вместо поста или гета?
     
  10. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    не возражаю.
    --- Добавлено ---
    вот правда не надо. у каждого возраста и опыта есть свои фетиши. вернёмся к этому через год, может быть :)
     
  11. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Они копируются в $_SERVER
     
    keren нравится это.
  12. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Это вот проблема, суть которой в том, что разработчик кладет болт на то, что GET-запросы должны быть запросами на получение данных, блин, а не на изменение состояния системы.

    Если у тебя в ссылке появляются юзер-специфичные данные, значит ты уже что-то делаешь не так. И надо исправлять причину, а не обвешивать это золотыми костылями.
     
  13. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    эх... теперь видимо придется ждать 40 лет, что бы вкурить смысл "молодежь, вы нихера не понимаете в арбузах на деревьях" ))
     
    Fell-x27 нравится это.
  14. Walk

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

    С нами с:
    7 сен 2008
    Сообщения:
    452
    Симпатии:
    86
    Нашел навороченный скрипт на защиту от CSR, вроде бы звезд много, ставлю - если открывать одно окно - проверка работает, если открыть сразу два, и отправить данные в первой форме - ошибка.

    блин, спрашивается к чему столько наворотов, и откуда столько звезд, если защита не работает как надо...
     
  15. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Потому что большинство людей видят, что звезд много и ставят еще одну не думая.
    Ну и да, зато защитища какая! Одноразовое все! Секурность! Все, что могли, от своего же пользователя оградили..