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 @@ +
- -
-
- - - -
-
+
+ + + + +
Для подписки нажмите на большее число
+ + +
+
\ 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();

Подписка на рассылку

- -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 = '

Не можем подтвердить ваши данные. Пожалуйста, повторите попытку.

'; -

Мы не можем добавить Вас в нашу рассылку.

-

Адрес электронной почты недействительный.

- - 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