Запретить пользователям отправлять форму с использованием метода POST на определенную страницу с другого веб-сервера в PHP [duplicate]

Вы можете использовать str.slice для этого:

df.columns = df.columns.str.slice(1)

2
задан virs90 11 May 2013 в 22:42
поделиться

3 ответа

Если жертва не просмотрела какие-либо формы на вашем сайте, у него еще не будет маркера, хранящегося в его сеансе.

Если злоумышленник представляет жертву форму без поля маркера, запрос POST, сделанный жертвой, будет проходить проверку CSRF, потому что $_POST['token'] и $_SESSION['token'] будут равны нулю. (Или обе пустые строки в зависимости от того, как PHP инициализирует неизвестные переменные.)

Вы также должны проверить, что токен существует в сеансе перед проверкой равенства и прерывания, если любой из этих тестов fail.

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

Помимо этой небольшой проблемы я не могу см. любую уязвимость CSRF в нем. Этот код выглядит так, как будто он выполнит эту работу.

2
ответ дан Ladadadada 25 August 2018 в 12:17
поделиться

В отношении продуктов, которые я поддерживаю, я бы сказал «нет». Генератор случайных чисел основан на rand (), который предсказуем. Кроме того, похоже, что случайное число очень короткое - оно должно быть достаточно длинным, чтобы он не мог быть грубым, принудительным во время действия сессии, и ни один из многих токенов CSRF активных сессий не был взломан.

Проверьте страницу OWASP на CSRF . Они дадут вам хорошее руководство.

1
ответ дан Freedom_Ben 25 August 2018 в 12:17
поделиться

Я бы сказал, что это достаточно для данной цели.

Значения, возвращаемые uniqid(mt_rand(), true), должны быть до 33 байт:

  • до 10 байтов префикса из mt_rand
  • 8 байтов системного времени в секундах
  • 5 байт текущих микросекунд
  • 10 байт из внутреннего линейного конгруэнц-генератора php_combined_lcg

Однако эти 33 байта не содержат 264 бит энтропии, но меньше:

  • log2 (231-1) ≈ 31 бит для префикса mt_rand
  • известно (например, поле заголовка ответа Date )
  • микросекунды могут иметь только одно из 106 значений, поэтому log2 (106) ≈ 20 бит
  • Значение LCG равно log2 (109) ≈ 30

Это сумма почти до 81 неизвестных бит. Для грубой силы это потребует в среднем 281/2 ≈ 1.2 · 1024 догадок, которые приводят к заданному токену при хэшировании. Данные для обработки будут приблизительно 8 · 1013 ТБ. С сегодняшним компьютером вы сможете запустить это примерно в 5.215 · 1017 секунд.

Этого должно быть достаточно, чтобы сделать атаку неосуществимой.

1
ответ дан Gumbo 25 August 2018 в 12:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: