Как создать приманку для борьбы со спамом в форме в Laravel
Как только ваш сайт заработает, очень скоро вы начнете получать спам из форм. Спам-боты пишут компьютерную программу, которая просто заполняет вашу форму поддельной информацией. Для владельцев сайтов – головная боль – очищать эти нежелательные данные и защищать вашу базу данных от таких ненужных записей. Эта статья написана для людей, которые создали свое приложение на Laravel. Мы изучим, как можно защитить свои формы от спама в Laravel.
Пользователь может добавить reCAPTCHA в свою форму, которая будет проверять, заполняются ли значения формы людьми или нет. Но при этом ваши пользователи должны решить головоломку перед отправкой формы. Другой способ – добавить последнюю версию Google reCAPTCHA. Но в правом нижнем углу вашего сайта будет отображаться значок reCAPTCHA.
Большинство владельцев сайтов не любят капчи. А если вы ненавидите капчи, держите в своих формах приманку, которая будет улавливать спам-боты.
В большинстве случаев спам-боты глупы, так как они просто заполняют все поля вашей формы. Они не знают, какие поля формы фактически используются для дальнейшей обработки. Мы можем воспользоваться этим сценарием и добавить в нашу форму фиктивное поле ввода (honeypot). Это скрытое поле должно оставаться пустым во время отправки формы. Таким образом, при проверке на стороне сервера, если это скрытое поле пусто, это будет действительная отправка формы, а если она не пуста, то это будет спам. Сказав это, давайте посмотрим, как создать приманку и защитить формы веб-сайтов от спама.
Создание приманки и предотвращение распространения спама в форме
Как мы уже говорили, используя скрытое поле, мы можем обмануть спам-ботов и остановить отправку формы на стороне сервера. Для этого воспользуемся пакетом laravel-honeypot. Используя этот пакет, пользователь может легко защитить одну или несколько форм. Им не нужно писать серверный код для каждой формы отдельно.
Для установки пакета откройте терминал в корневом каталоге вашего проекта и выполните команду:
composer require spatie/laravel-honeypot
После установки пакета опубликуйте файл конфигурации пакета с помощью команды:
php artisan vendor:publish --provider="SpatieHoneypotHoneypotServiceProvider" --tag=config
Эта команда добавит honeypot.php
файл в config
каталог. Вам не нужно изменять конфигурационный файл. Вместо этого в .env
файл добавьте константу, показанную ниже.
HONEYPOT_NAME=honeypot_for_bots
Здесь мы дали имя “honeypot_for_bots”, которое будет именем вашего скрытого поля. Вы можете присвоить этой константе любое другое имя.
Затем зарегистрируйте глобальное промежуточное ПО, которое будет защищать все ваши формы из одного места.
appHttpKernel.php
<?php
…
…
protected $middleware = [
// ...
SpatieHoneypotProtectAgainstSpam::class,
];
Все сделано! Теперь перейдите в свою форму и добавьте к ней приманку, добавив @honeypot
в форму HTML. Ваш файл лезвия будет выглядеть примерно так, как показано ниже.
<form action="" method="post">
@honeypot
<input type="text" name="fullname" placeholder="Full Name" />
<input type="submit" name="submit" value="Submit" />
{{ csrf_field() }}
</form>
Теперь, если спам-боты пытаются рассылать спам в вашей форме, пакет отклонит запрос. В результате в вашей базе данных больше не будет спама.
Статьи по Теме
- Руководство по добавлению Google reCAPTCHA v3 на ваш сайт Laravel
- Как использовать события и слушатели Laravel в вашем приложении