Я чувствую, что это логическая проблема. При загрузке страницы я вызываю token.php, который должен установить токен сеанса и заполнить скрытое поле тем же токеном.
Когда моя веб-форма отправлена, она сравнивает токены перед отправкой информации мне. Цель состоит в том, чтобы предотвратить атаки CSRF. Поскольку я очень новичок в PHP (и js, jQuery, HTML, кодирование и многие другие), я не могу найти ошибку.
Я получаю ответ "неверный токен". Он должен установить одинаковый токен для обеих переменных, и я обрабатываю пустой токен с другим сообщением об ошибке.
В голове у меня index.html
<script>
$(document).ready(function() {
$.get('token.php').done(function(data) {
$('input[name="token"]').val(data);
}).fail();
{
//failure code goes here
}
});
</script>
token.php
<?php
session_start();
if (empty($_SESSION['token'])) {
$_SESSION['token'] = bin2hex(random_bytes(32));
}
$token = $_SESSION['token'];
?>
formsubmit.php
<?php
if($_SERVER["REQUEST_METHOD"] == "POST") {
if (!empty($_POST['token'])) {
if (hash_equals($_SESSION['token'], $_POST['token'])) {
$emailbody = 'Name: '.$_POST['m_title'].' '.$_POST['m_firstname'].' '.$_POST['m_surname']."\n"
.'Email: '.$_POST['m_email']."\n"
.'Phone: '.$_POST['m_phone']."\n"
.'D.O.B: '.$_POST['m_dob_day'].' '.$_POST['m_dob_month'].' '.$_POST['m_dob_year']."\n"
.'Postcode: '.$_POST['m_postcode']."\n"
.'Lenders: '.$_POST['m_bank1'].','.$_POST['m_bank2'].','.$_POST['m_bank3'].','.$_POST['m_bank4'].','.$_POST['m_bank5'].','.$_POST['m_bank6'].','.$_POST['m_bank7'].','.$_POST['m_bank8'];
mail('**removed**', 'Web Lead', $emailbody);
header('Location: **removed**.com/thankyou');
exit();
}
else {
echo "token invalid";
}
}
else {
echo "token blank";
}
}
else {
echo "invalid request";
}
?>