Проверка csrf в waSystem На рассмотрении

1

Текущая проверка:

if (waRequest::post('_csrf') != waRequest::cookie('_csrf')) {
    throw new waException('CSRF Protection', 403);
}

Позволяет задать пустые значения и успешно пройти проверку.

Это можно исправить добавив параметр по умолчанию:

if (waRequest::post('_csrf', 1) !== waRequest::cookie('_csrf')) {
    throw new waException('CSRF Protection', 403);
}

8 комментариев

  • +1
    Genasyst Genasyst 27 мая 2018 05:18 #

    А что мне мешает передать одинаковые значения в пост и куки? Если уж делать, то через сессию, но она открывается не сразу. Чтобы усложнить алгоритм, нужно шифровать само название ячейки массива, чтобы боты не смогли использовать шаблон _csrf.

    • +1
      EnsoStudio EnsoStudio 27 мая 2018 06:15 #

      Это уже сложнее реализовать при csrf атаке.

      Хранение в сессии - верное решение, но хотя бы такой минимум сделали.

    • +1
      J. B. diGriz J. B. diGriz 27 мая 2018 13:12 #

      значение csrf вообще надо не полем формы, а в http заголовке запроса передавать. тогда можно защищать не только данные формы и не только post-запросы

      • +1
        EnsoStudio EnsoStudio 27 мая 2018 13:35 #

        не - легко подделать

        • +1
          J. B. diGriz J. B. diGriz 27 мая 2018 13:44 #

          Поле формы не сложнее. Я не о хранении значения для сравнения. Его и вправду в сессии надо бы

        • +1
          J. B. diGriz J. B. diGriz 27 мая 2018 13:46 #

          Для форм можно ещё md5 названий полей посоленное csrf. Тогда будет сложнее добавить левое поле в форму

          • +1
            Genasyst Genasyst 27 мая 2018 13:58 #

            Мне кажется ты рассказываешь про мой код из одного проекта)))

            Добавить комментарий

            Чтобы добавить комментарий, зарегистрируйтесь или войдите