Вы можете использовать str.slice
для этого:
df.columns = df.columns.str.slice(1)
Если жертва не просмотрела какие-либо формы на вашем сайте, у него еще не будет маркера, хранящегося в его сеансе.
Если злоумышленник представляет жертву форму без поля маркера, запрос POST, сделанный жертвой, будет проходить проверку CSRF, потому что $_POST['token']
и $_SESSION['token']
будут равны нулю. (Или обе пустые строки в зависимости от того, как PHP инициализирует неизвестные переменные.)
Вы также должны проверить, что токен существует в сеансе перед проверкой равенства и прерывания, если любой из этих тестов fail.
В зависимости от вашего сайта пользователь, не увидев форму, может быть очень вероятным или может быть крайним краем. При проверке наличия маркера во-первых, не имеет значения, сколько форм у вас на вашем сайте, нет возможности атаки CSRF.
Помимо этой небольшой проблемы я не могу см. любую уязвимость CSRF в нем. Этот код выглядит так, как будто он выполнит эту работу.
В отношении продуктов, которые я поддерживаю, я бы сказал «нет». Генератор случайных чисел основан на rand (), который предсказуем. Кроме того, похоже, что случайное число очень короткое - оно должно быть достаточно длинным, чтобы он не мог быть грубым, принудительным во время действия сессии, и ни один из многих токенов CSRF активных сессий не был взломан.
Проверьте страницу OWASP на CSRF . Они дадут вам хорошее руководство.
Я бы сказал, что это достаточно для данной цели.
Значения, возвращаемые uniqid(mt_rand(), true)
, должны быть до 33 байт:
mt_rand
php_combined_lcg
Однако эти 33 байта не содержат 264 бит энтропии, но меньше:
mt_rand
Это сумма почти до 81 неизвестных бит. Для грубой силы это потребует в среднем 281/2 ≈ 1.2 · 1024 догадок, которые приводят к заданному токену при хэшировании. Данные для обработки будут приблизительно 8 · 1013 ТБ. С сегодняшним компьютером вы сможете запустить это примерно в 5.215 · 1017 секунд.
Этого должно быть достаточно, чтобы сделать атаку неосуществимой.