мені не дуже зайшло.
Теж думав тиждень, що його і куди. Зупинився на трех варіантах відразу всі три і включив
1. Перевірка схованого поля, зробив поле, сховав його в формі, назвав
<input type="email" class="n-message" name="n-message" value="">, в стилях указав display: none; і перевіряю через hooks, "якщо заповнено" даю відповідь 200 ок, але є ньюанс)
<?php
if ($_POST['n-message']) { // трололошка якась))
echo $FetchIt->success('Все гуд чувак');
die();
} else {
return true;
}
2. Перевірка самого повідомлення на знаки які не потрібні
// Визначаємо значення службових змінних за замовчуванням
$success=true;
$haserror=false;
// Масив заборонених фрагментів рядків
// Якщо в якому-небудь полі форми зустрінеться один з нижче перелічених фрагментів, то далі обробляти повідомлення не будемо
$forb=array(
'@',
'http',
'https',
'://',
'www',
'Test',
'test'
);
// Проходимо по масиву заборонених фрагментів
foreach ($forb as $f){
if($haserror==false){ // Якщо ще не зустрівся заборонений фрагмент
$haserror=strpos($value,$f); // Перевіряємо його в значенні поточного перевіряємого поля вводу
}
}
// Якщо була виявлена помилка
if ($haserror!=false) {
$validator->addError($key,'Недопустиме значення!');
$modx->log(xPDO::LOG_LEVEL_ERROR,'Тут живе какашка: IP='.$_SERVER['REMOTE_ADDR'].' Зміст: '.$key.': '.$value);
$success=false;
}
// Повертаємо результат роботи валідатора
return $success;
Ну це на прикладі MODX, але думаю і на EVO можно зробити
3. csrf_token, типу такого (https://laravel.com/docs/11.x/csrf), генерація токена, пишемо в кукі, перевірка токена перед відправленням повідомлення, але думаю що можно і не csrf_token а генерувати случайні літери та цифри,
use Illuminate\Support\Str;
// Генеруємо випадковий рядок довжиною 8 символів
$randomString = Str::random(8);
а то токени веліки))
є різниця чи на php чи js реалізовувати?
Робив на пихі, але думаю що різниці немає
Обсуждают сегодня