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