Итак, у меня есть базовый метод .ajax() POST для PHP файла.
Какие меры безопасности мне нужны?
В нескольких сообщениях упоминалось использование скрытого поля ввода MD5, которое вы отправляете через AJAX и проверяете в файле PHP. Это хороший метод?
Итак, у меня есть базовый метод .ajax() POST для PHP файла.
Какие меры безопасности мне нужны?
В нескольких сообщениях упоминалось использование скрытого поля ввода MD5, которое вы отправляете через AJAX и проверяете в файле PHP. Это хороший метод?
Риск CSRF заключается в том, что внешний сайт может отправлять данные на ваш компьютер, и браузер пользователей автоматически отправит cookie аутентификации вместе с ним.
Что вам нужно - это какой-то способ для принимающего действия (который ваш метод $.ajax() отправляет данные POST), чтобы проверить, что запрос пришел с другой страницы вашего сайта, а не на внешний сайт.
Существует несколько способов сделать это, но рекомендуемый способ - добавить токен в запрос, который вы можете проверить, и что хакеры не могут добраться.
В самом простейшем:
$.ajax(), который включает токен.Хакер не может попасть в вашу БД и фактически не может прочитать страницу, которую вы отправили пользователю (если только они не получают атаку XSS, но эта другая проблема), поэтому не может подделать токен.
Все, что имеет значение с токеном, - это то, что вы можете предсказать (и проверить) его и что хакер не может.
По этой причине проще всего генерировать что-то длинное и случайное и хранить его в БД, но вместо этого вы можете создать что-то зашифрованное. Я бы не просто MD5 - это имя пользователя - если злоумышленники CSRF выясняют, как сгенерировать ваши токены, вы будете взломаны.
Другой способ хранения маркера заключается в cookie (а не в вашей базе данных), так как злоумышленники не могут читать или изменять ваши файлы cookie, а просто заставляют их повторно отправлять. Затем вы являетесь токеном в HTTP POST-данных, сопоставляете токен в файле cookie.
Вы можете сделать их намного более сложными, например, токен, который изменяется каждый раз, когда он успешно используется (предотвращение повторной отправки) или токен, специфичный для пользователя и действия, но тот основной шаблон.
С точки зрения подделки запроса, не имеет значения, как клиент отправляет запрос, как важно его получение. Те же правила CSRF применяются для сообщения ajax как любой другой тип сообщения.
Я рекомендую прочитать листы для защиты CSRF. Использование секретного токена для каждого пользователя является наиболее распространенной формой защиты.