За последние 24 часа нас посетили 18512 программистов и 1599 роботов. Сейчас ищет 851 программист ...

Csrf,Yii2

Тема в разделе "PHP для новичков", создана пользователем kakadyi, 4 окт 2015.

  1. kakadyi

    kakadyi Новичок

    С нами с:
    9 сен 2015
    Сообщения:
    25
    Симпатии:
    0
    Вопросов пара:
    1) В YII2 реализована двухступенчатая защита от CSRF атак - вначале приложение сравнивает csrf - токен из куки, если всё ок, сравнивает токен из метатага. А какой смысл пихать токен в куки, чем плох одноступенчатый метод с использованием лишь метатага? Тем более, если у юзера отключены куки - то выкинет 400.
    2) Так и не могу понять до конца смысл защиты. Если используется метод GET, изменяющий состояние, вопросов нет. Вот пример из педевикии :
    Код (PHP):
    1. Мэллори: Привет, Алиса! Посмотри, какой милый котик: <img src="http://bank.example.com/withdraw?account=Alice&amount=1000000&for=Mallory"> 
    Ну а если у мну на сайте такие методы реализованы через POST - каким образом я пострадаю без csrf - токенов?
    При POST запросе ссылка будет иметь вид
    Код (PHP):
    1. http://bank.example.com/withdraw     
    и все данные будут скрыты в теле запроса.

    Добавлено спустя 8 минут 36 секунд:
    На второй вопрос нашел ответ - злоумышленник может сгенерировать скрытую форму, которая отправится в случае перехода незадачливым юзером по ссылке. На первый вопрос пока еще не нашел:)
    С яваскриптом практически незнаком, поэтому тут может быть такое объяснение : при создании объекта XMLHttpRequest csrf - токен берется как - раз из куки. Но если через яваскрипт можно спарсить значение метатага, то это ничего не объясняет. Вопрос - можно ли?:)
     
  2. kakadyi

    kakadyi Новичок

    С нами с:
    9 сен 2015
    Сообщения:
    25
    Симпатии:
    0
    Ребят,выручайте:)
     
  3. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ахз. на вид - не нужно это. Хватит одного правильного. А в куках - неправильно хранить. Зато удобно =)

    Гет получает, а не изменяет. Гетом нельзя менять. Хотя бы потому, что геты грузятся браузерами привентивно порой, порой не грузятся, а берутся из кеша. Гет - это получение весьма статичного контента, который ещё и кешируется, если не запрещено.

    никаким через картинки. Но можно через js организовать запрос.

    чего? я не понял.
     
  4. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Приложение не получает из меты CSRF, оно получает его вместе с post-запросом. И насколько я помню, куки можно при желании отключить. В метатаге его удобно держать, поскольку его оттуда достать можно на JS:
    Код (Text):
    1.  
    2. $("meta[name='csrf-token']")
    И прицепить к какому-нибудь ajax-у

    Добавлено спустя 1 минуту 40 секунд:
    А здесь задавали вопрос: http://yiiframework.ru/forum/ ? Там, между прочим, один из разработчиков Yii2 тусуется, так что там скорее ответят
     
  5. kakadyi

    kakadyi Новичок

    С нами с:
    9 сен 2015
    Сообщения:
    25
    Симпатии:
    0
    Неа,пойду туда:)