Подтвердить что ты не робот

Нужен ли мне токен CSRF для jQuery.ajax()?

Итак, у меня есть базовый метод .ajax() POST для PHP файла.

Какие меры безопасности мне нужны?

В нескольких сообщениях упоминалось использование скрытого поля ввода MD5, которое вы отправляете через AJAX и проверяете в файле PHP. Это хороший метод?

4b9b3361

Ответ 1

Риск CSRF заключается в том, что внешний сайт может отправлять данные на ваш компьютер, и браузер пользователей автоматически отправит cookie аутентификации вместе с ним.

Что вам нужно - это какой-то способ для принимающего действия (который ваш метод $.ajax() отправляет данные POST), чтобы проверить, что запрос пришел с другой страницы вашего сайта, а не на внешний сайт.

Существует несколько способов сделать это, но рекомендуемый способ - добавить токен в запрос, который вы можете проверить, и что хакеры не могут добраться.

В самом простейшем:

  • При входе в систему создайте длинный случайный токен и сохраните его против пользователя.
  • Добавьте параметр в запрос $.ajax(), который включает токен.
  • По запросу проверьте, совпадает ли токен с тем, который вы сохранили для пользователя.
  • Если токен не соответствует, у вас есть CSRF-хак.

Хакер не может попасть в вашу БД и фактически не может прочитать страницу, которую вы отправили пользователю (если только они не получают атаку XSS, но эта другая проблема), поэтому не может подделать токен.

Все, что имеет значение с токеном, - это то, что вы можете предсказать (и проверить) его и что хакер не может.

По этой причине проще всего генерировать что-то длинное и случайное и хранить его в БД, но вместо этого вы можете создать что-то зашифрованное. Я бы не просто MD5 - это имя пользователя - если злоумышленники CSRF выясняют, как сгенерировать ваши токены, вы будете взломаны.

Другой способ хранения маркера заключается в cookie (а не в вашей базе данных), так как злоумышленники не могут читать или изменять ваши файлы cookie, а просто заставляют их повторно отправлять. Затем вы являетесь токеном в HTTP POST-данных, сопоставляете токен в файле cookie.

Вы можете сделать их намного более сложными, например, токен, который изменяется каждый раз, когда он успешно используется (предотвращение повторной отправки) или токен, специфичный для пользователя и действия, но тот основной шаблон.

Ответ 2

С точки зрения подделки запроса, не имеет значения, как клиент отправляет запрос, как важно его получение. Те же правила CSRF применяются для сообщения ajax как любой другой тип сообщения.

Я рекомендую прочитать листы для защиты CSRF. Использование секретного токена для каждого пользователя является наиболее распространенной формой защиты.