#php #forms #email #post #recaptcha
#php #формы #Адрес электронной почты #Публикация #recaptcha
Вопрос:
Я думал о том, как я (или мы) могли бы создать полностью функциональную PHP-форму, которая могла бы выполнять две вещи:
- Генерируются случайным образом
- Сохраняйте исходное форматирование при разборе электронной почты
Для тех, кто не знаком с методом honeypot, я кратко объясню это. Метод honeypot использует визуально невидимое поле (display: none), которое должно оставаться пустым при публикации. Поскольку боты будут проверять только исходный код, очень вероятно, что бот автоматически заполнит это поле и, таким образом, будет заблокирован проверкой if / else при отправке формы.
Я написал концепцию, которая объясняет алгоритм, который должен это делать. Я добавил несколько примеров массивов, просто для демонстрации.
Мне очень любопытно, может ли кто-нибудь помочь мне улучшить метод. Достаточно ли это безопасно? Или есть что-то, чего мне не хватает.
$fields = [
[
"name" => "name",
"type" => "text",
"class" => "input--text",
"required" => true
],
[
"name" => "email",
"type" => "text",
"class" => "input--text",
"required" => true
],
[
"name" => "phone",
"type" => "text",
"class" => "input--text",
"required" => true
],
];
$classes = [
"input--town",
"input--city",
"input--country",
"input--date",
"input--subject",
"input--town",
"input--town",
];
$names = [
"city",
"birthday",
"genre",
"location",
"agreement",
"year",
"month",
"day",
"strength",
];
$types = [
"date",
"email",
"text",
"time",
"search",
"checkbox",
"radio",
"week",
];
// $_POST
$_POST = [
"birthday" => "",
"name" => "Jim",
"city" => "",
"email" => "text@example.com",
"phone" => "1234567890"
];
$fields = (count($fields) rand(2, 6));
// Concept algorithm
/*
=== Goal
Randomize both real and fake fields in order to prevent
AI / Spider(s) / Bot(s) to figure out our honeypot method
=== Parsing of field
- For loop the amount of fields
- Create new array with fields
- Include the fields with index $i in new array (with encrypted CSS order slug, md5 into sha1 with substring)
- If all included randomize the remaining (random: class, random: type, random: order)
- Shuffle array
- Loop and parse into <form></form>
- Add ReCAPTCHA
=== Retrieving of $_POST and markup of e-mail
- Check for ReCAPTCHA validity
- Loop through $_POST
- Check:
- If "name" in $names => If so => check if empty. If empty, continue
- Save all collected $_POST fields to new array
- Loop through the original array of $fields
- Use name attribute in fields to index $_POST fields
- Escape, sanitize and parse to e-mail message
---------
- DONE => Send
---------
- Else => It's a field that should be empty so it's filled by a bot... SPAM!
=== Featured
- Random amount of fields (both fake and true)
- Randomized order of fields in HTML
- Structurized with CSS
- Algorithmic check if fake or real field
- Keep original field order in e-mail markup
Комментарии:
1. Просто используйте Google invisible recaptcha 😇
2. Как насчет ботов, которые используют PhantomJS или любой другой виртуальный браузер и виртуально щелкают элементами для заполнения форм?
3. Допустимая точка зрения… Я также наткнулся на несколько обученных ботов на python, которые могут обходить recaptcha