2011-01-30 7 views
3

Этого достаточно для защиты CSRF:Этого достаточно для защиты CSRF?

  • генерируется случайная строка, $_SESSION['hash'] сохраняет его
  • Скрытое значение (в $_POST['thing']) в форме содержит случайную строку
  • Когда форма отправлена, он проверяет $_SESSION['hash'] равен $_POST['thing'], и продолжается, если они соответствуют

Один из пользователей моего сайта постоянно говорит мне, что мой сайт уязвим, но я не могу сказать, если он просто троллирует меня. Есть ли что-нибудь еще, что я могу сделать?

+0

Вероятно, это зависит от того, как часто вы меняете эту случайную строку; каждый пользователь должен получить свои собственные, и я предлагаю регулярно его вращать, поэтому случайные раскрытия не слишком опасны. – sarnold

+0

Каждый раз, когда они загружают страницу, она изменяется, если она еще не установлена. –

ответ

1

Если это так, уникальная для каждого пользователя, тогда этого должно быть достаточно. Даже если это будет одинаково для продолжительности сеанса пользователя, все равно ОК, но я бы предложил периодически генерировать его. Также вы можете использовать разные токены для каждой формы. Например, если у вас есть форма для входа в систему и комментарии, лучше использовать для них разные токены, но это не на 100% необходимо.

Почему вы предполагаете, что только потому, что кто-то говорит, что ваш сайт уязвим, это связано с подключением CSRF? У них так много других возможных уязвимостей.

Возможно, ваш веб-сервер устарел и уязвим, возможно, версия php не самая последняя. Возможно, пользователь смог войти на ваш сервер через ssh или telnet. Возможно, пользователь смог угадать пароль администратора.

Возможно, пользователи могут войти в систему через cookie и сохранить учетные данные для входа в файлы cookie.

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

0

от: http://en.wikipedia.org/wiki/Cross-site_request_forgery

  • вы можете дополнительное уменьшение времени жизни печенья
  • проверки HTTP-Referer заголовок
  • и роботов - но не каждый пользователь в Фавориты

однако, Ваш acion с секретным ключом все еще лучше, чем ничего ...

3

То, что я думаю, что вам не хватает, ограничивает токен до небольшого окна.

Вы должны взглянуть на Chris's CRSF-article. Краткая сводка:

  • Атака CSRF должна включать в себя действительный токен (токен анти-CSRF), чтобы идеально имитировать отправку формы.
  • Действительность токена также может быть ограничена небольшим периодом времени, например пять минут
  • Если вы используете токен во всех своих формах, как я предложил, вы можете исключить CSRF из списка проблем , Хотя никакая защита не может считаться абсолютной (злоумышленник может теоретически догадаться о действительном знаке), этот подход смягчает большую часть риска. До следующего месяца будьте в безопасности.
+0

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

+0

Я также, вероятно, не буду использовать истечение срока, но если бы я использовал его. Я бы поставил его не слишком скоро! – Alfred

1

Каждый раз, когда они загружают страницу, она изменяется, если она еще не установлена.

Ну, это ваша проблема. Как только маркер извлекается, все действия могут быть легко выполнены дальше. Обычно я использую токен, чтобы быть действительным для одного единственного запроса, а затем регенерировать его.

Смежные вопросы