Этого достаточно для защиты CSRF? - PullRequest
3 голосов
/ 30 января 2011

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

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

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

Ответы [ 4 ]

3 голосов
/ 30 января 2011

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

Вам следует взглянуть на статью Криса CRSF .Краткая сводка:

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

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

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

1 голос
/ 30 января 2011

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

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

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

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

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

0 голосов
/ 30 января 2011

с: http://en.wikipedia.org/wiki/Cross-site_request_forgery

  • Вы можете дополнительно уменьшить время жизни куки
  • , проверить заголовок HTTP Referer
  • и капчу - но не для каждого пользователянравится это

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

...