From 8be4f1c0faa2b97ce5bcdb6b1d5455ac934e059a Mon Sep 17 00:00:00 2001
From: Turing
Date: Sun, 2 Mar 2025 02:36:19 +0300
Subject: [PATCH] add capchta frm subsripts
---
blocks/mobile-subscript.php | 20 +++--
functions.php | 28 +++++++
page-subscript.php | 150 ++++++++++++++++++++----------------
partials/formsubscript.php | 12 +--
4 files changed, 128 insertions(+), 82 deletions(-)
diff --git a/blocks/mobile-subscript.php b/blocks/mobile-subscript.php
index 35d70de..c608346 100644
--- a/blocks/mobile-subscript.php
+++ b/blocks/mobile-subscript.php
@@ -1,14 +1,18 @@
+
-
-
=vij_lang('email_title', LANG_VERSION)?>
-
-
+
+
\ No newline at end of file
diff --git a/functions.php b/functions.php
index 9dd7538..2db14fa 100644
--- a/functions.php
+++ b/functions.php
@@ -7,6 +7,8 @@ if (! defined( 'ABSPATH' )) {
define('YA_TOKEN', 'y0_AgAAAAA5ZMbXAAjnxwAAAADXZGKqufBi9E2_TnG4n9l_K0OjYOAukmk');
define('YA_COUNTER', '56480275');
+define('FRM_KEY', 'daer-yui-hjku4566-sdef-1234');
+
// Полностью отключить XML-RPC
add_filter( 'xmlrpc_enabled', '__return_false' );
@@ -1068,6 +1070,32 @@ function convert_images_to_amp($content) {
add_filter('the_content', 'convert_images_to_amp');
+function add_hash_frm(){
+
+ static $result = null;
+
+ if (is_array($result))
+ return $result;
+
+ // Генерируем два случайных числа
+ $num1 = rand(1, 50);
+ $num2 = rand(10, 99);
+
+ // Гарантируем, что числа не равны
+ while ($num1 == $num2) {
+ $num2 = rand(10, 99);
+ }
+
+ // Хешируем ответ
+ $hash = hash_hmac('sha256', $num2, FRM_KEY);
+
+ return ['num1' => $num1, 'num2' => $num2, 'hash' => $hash];
+
+
+}
+
+
+
// подписчики на главную
//add_action('admin_init', 'restrict_subscriber_admin_access');
function restrict_subscriber_admin_access() {
diff --git a/page-subscript.php b/page-subscript.php
index a102992..79fdf17 100644
--- a/page-subscript.php
+++ b/page-subscript.php
@@ -6,81 +6,95 @@ get_header();
Подписка на рассылку
-
- // режим подтверждение подписки
-if (isset( $_GET['id'] )){
-
- $sanitized_id = sanitize_text_field( $_GET['id'] );
- $sql_update = "UPDATE {$wpdb->prefix}subusers SET status = 1 WHERE hash = '$sanitized_id'";
-
- $result = $wpdb->get_results( $sql_update );
-
- echo '
Спасибо, мы включили Ваш e-mail!
-
Наши письма могут оказаться в разделе "Рассылки" Вашего почтового приложения или сайта.
';
-
-
-}
-
-elseif( !isset($_POST['mytext']) || $_POST['mytext'] !== ''){ // поле должно быть пустым - заполнить может только бот
- echo '
Не можем подтвердить ваши данные. Пожалуйста, повторите попытку.
';
-}
-
-elseif ( !isset($_POST['subscription_nonce']) || !wp_verify_nonce($_POST['subscription_nonce'], 'subscription_form_nonce') ) {
- echo ('
Неверный запрос. Пожалуйста, повторите попытку.
');
-}
-
-elseif( !isset($_POST['addrhash']) || $_POST['addrhash'] !== adddr_hash() ){
- echo '
Не можем опеределить ваши данные. Пожалуйста, повторите попытку.
';
-}
-
-elseif (isset($_POST['email'])) {
-
-
-
- $email = strtolower(trim($_POST['email']));
- $email = sanitize_text_field($email);
-
- if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
-
- $hash = md5('775+'.$email);
- $date_insert = date('Y-m-d H:i:s');
-
- $add_sub_sql = "INSERT INTO {$wpdb->prefix}subusers (mail, status, hash, date) VALUES ('$email', '0', '$hash', '$date_insert')";
+
+
- //$result = $wpdb->get_results($add_sub_sql);
-
- $hash_link = home_url().'/subscript?id='.$hash;
- $to = $email;
- $subject = 'Подписка на рассылку ВиЖ';
- $message = "
-Здравствуйте!\n
-Для подтверждения подписки на нашу рассылку перейдите по ссылке ниже\n
-$hash_link.\n\n
-Если вы не отправляли заявку просто проигнорируйте это письмо.";
+
- $headers = array('Content-Type: text/plain; charset=UTF-8');
- // Отправка письма
- //wp_mail($to, $subject, $message, $headers);
+Благодарим за интерес к нашему изданию!
- На Вашу почту отправлено письмо для подтверждения подписки.
';
-
+function handle_subscription_confirmation() {
- } else { ?>
+ global $wpdb;
+ $html = '';
+ $err = 'Не можем подтвердить ваши данные. Пожалуйста, повторите попытку.
';
- Мы не можем добавить Вас в нашу рассылку.
- Адрес электронной почты недействительный.
-
- }
+ // Режим подтверждения подписки
+ if (isset($_GET['id'])) {
+ $sanitized_id = sanitize_text_field($_GET['id']);
+ $sql_update = $wpdb->prepare("UPDATE {$wpdb->prefix}subusers SET status = 1 WHERE hash = %s", $sanitized_id);
+ $wpdb->query($sql_update);
+ $html .= 'Спасибо, мы включили Ваш e-mail!
+ Наши письма могут оказаться в разделе "Рассылки" Вашего почтового приложения или сайта.
';
+ return $html;
+ }
-}?>
-
+
+ // Поле mytext должно быть пустым
+ if (!empty($_POST['mytext'])) {
+ return $err;
+ }
+
+
+ // Проверка nonce
+ if (!isset($_POST['subscription_nonce']) || !wp_verify_nonce($_POST['subscription_nonce'], 'subscription_form_nonce')) {
+ return $err;
+ }
+
+ // Проверка hash адреса
+ //if (!isset($_POST['addrhash']) || $_POST['addrhash'] !== adddr_hash()) {
+ // return $err;
+ //}
+ // Основная обработка подписки
+ if (isset($_POST['email'])) {
+ if (!isset($_POST['re_num']) || !isset($_POST['re_code'])) {
+ return $err;
+ }
+
+ $user_answer = (int)$_POST['re_num'];
+ $expected_hash = hash_hmac('sha256', $user_answer, FRM_KEY);
+
+ if ($_POST['re_code'] === $expected_hash) {
+ $email = strtolower(trim($_POST['email']));
+ $email = sanitize_email($email);
+
+ if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
+ $hash = md5('775+' . $email);
+ $date_insert = current_time('mysql');
+
+ $wpdb->insert(
+ "{$wpdb->prefix}subusers",
+ [
+ 'mail' => $email,
+ 'status' => 0,
+ 'hash' => $hash,
+ 'date' => $date_insert
+ ],
+ ['%s', '%d', '%s', '%s']
+ );
+
+ $hash_link = home_url('/subscript?id=' . $hash);
+ $to = $email;
+ $subject = 'Подписка на рассылку ВиЖ';
+ $message = "Здравствуйте!\n\nДля подтверждения подписки на нашу рассылку перейдите по ссылке ниже\n$hash_link.\n\nЕсли вы не отправляли заявку, просто проигнорируйте это письмо.";
+ $headers = ['Content-Type: text/plain; charset=UTF-8'];
+
+ //wp_mail($to, $subject, $message, $headers);
+
+ $html .= 'Благодарим за интерес к нашему изданию!
+ На Вашу почту отправлено письмо для подтверждения подписки.
';
+ } else {
+
+ }
+ } else {
+ return $err;
+ }
+ } else {
+ return $err;
+ }
-
-
-
-
-
+$ihash = add_hash_frm();?>
+
@@ -13,7 +10,10 @@ $_SESSION['captcha'] = $num1 + $num2;
-
+
+
Для подписки нажмите на большее число
+
+
\ No newline at end of file