Вопрос приходят левые заказы - как можно из заблокировать?

lightman555

Гуру форума
Регистрация
7 Мар 2013
Сообщения
454
Реакции
72
Некое время назад стали периодически приходить левые заказы с несуществующими телефонными номерами и емайлом.
Вопрос что это такое и для чего?
И главный вопрос как можно их остановить?

Магазин на движке 1.6
Оформление идет через One Page Checkout PrestaShop v2.6.3

емайлы вот такие:
Покупатель: John . (johnsmith009@storebotmail.joonix.net)
Покупатель: John . (johnsmith006@storebotmail.joonix.net)
Покупатель: John . (johnsmith003@storebotmail.joonix.net)
 
Большое спасибо :)

Для того, чтобы предложить решенипе нужно больше исходных данных.
Как минимум, версия prestashop
в данном случае версия 1.6
но пытаюсь построить и на 9-ке - то есть будет актуально и для 9-ки
 
а как его сделать?
Для просмотра ссылки Войди или Зарегистрируйся
или самопал типа такого


PHP:
<?php
// Путь: override/classes/Customer.php (от корня магазина)
// После заливки удалить кеш override: var/cache/*/class_index.php

class Customer extends CustomerCore
{
    public function validateFields($die = true, $error_return = false)
    {
        $res = parent::validateFields($die, $error_return);
        $whitelist = ['gmail.com', 'company.com'];
        $domain = strtolower(substr(strrchr($this->email, '@'), 1));
        if ($res !== false && $this->email && !in_array($domain, $whitelist, true)) {
            $msg = 'Email domain not allowed';
            if ($die) throw new PrestaShopException($msg);
            return $error_return ? $msg : false;
        }
        return $res;
    }
}
 
Не смог быстро найти версию 1.6
Должно работать на девятой версии (prestashop_edition_basic_version_9.1.4-5.0).

Файл для изменения classes/Validate.php
Это глобальная проверка вводимых значений.

PHP:
    public static function isEmail($email)
    {
        // Check if the value is empty
        if (empty($email)) {
            return false;
        }

        $validator = Validation::createValidator();
        $errors = $validator->validate($email, new Email([
            'mode' => 'strict',
        ]));

        if (count($errors) > 0) {
            return false;
        }
      
        // На всякий случай обрежем пробелы
        // И сделаем все символы маленькими
        $email = trim(mb_strtolower($email));
            [$localPart, $domain] = explode('@', $email, 2);
        // Блокируем конкретные домены
        $blockedDomains = [
// Дописать сюда домены, которые нужно запретить
// В конце строки дожна быть запятая
            'storebotmail.joonix.net',
            'joonix.net',
            'new_domain00.net',
            'new_domain01.net',
        ];
      
        if (in_array($domain, $blockedDomains, true)) {
            return false;
        }

        // Check if the value is correct according to both validators (RFC & CyrillicCharactersInEmailValidation)
        return (new EmailValidator())->isValid($email, new MultipleValidationWithAnd([
            new RFCValidation(),
            new CyrillicCharactersInEmailValidation(),
        ]));
    }

Проверьте, пожалуйста, все ли работает?
 
Последнее редактирование:
Не смог быстро найти версию 1.6
Должно работать на девятой версии (prestashop_edition_basic_version_9.1.4-5.0).

Файл для изменения classes/Validate.php
Это глобальная проверка вводимых значений.

PHP:
    public static function isEmail($email)
    {
        // Check if the value is empty
        if (empty($email)) {
            return false;
        }

        $validator = Validation::createValidator();
        $errors = $validator->validate($email, new Email([
            'mode' => 'strict',
        ]));

        if (count($errors) > 0) {
            return false;
        }
       
        // На всякий случай обрежем пробелы
        // И сделаем все символы маленькими
        $email = trim(mb_strtolower($email));
            [$localPart, $domain] = explode('@', $email, 2);
        // Блокируем конкретные домены
        $blockedDomains = [
            'storebotmail.joonix.net',
            'joonix.net',
        ];
       
        if (in_array($domain, $blockedDomains, true)) {
            return false;
        }

        // Check if the value is correct according to both validators (RFC & CyrillicCharactersInEmailValidation)
        return (new EmailValidator())->isValid($email, new MultipleValidationWithAnd([
            new RFCValidation(),
            new CyrillicCharactersInEmailValidation(),
        ]));
    }

Проверьте, пожалуйста, все ли работает?
а если будут еще - как массив сделать таких доменов?
 
какой то файл txt и из него брать по списку в столбик
Это будет уж очень некрасиво.

Второй вариант проверки доменных имен в почте.
PHP:
        // На всякий случай обрежем пробелы
        // И сделаем все символы маленькими
        $email = trim(mb_strtolower($email));
            [$localPart, $domain] = explode('@', $email, 2);
        // Блокируем конкретные домены
        $blockedDomains = [
        // вариант строгий storebotmail.joonix.net
            'storebotmail.joonix.net', // блокируется xxxx@storebotmail.joonix.net
        // вариант строгий для joonix.net
            'joonix.net',   // блокируется xxxx@storebotmail.joonix.net
                            // блокируется xxxx@joonix.net
        // вариант для любых доменов в которых есть joonix
            'joonix',   // блокируется xxxx@storebotmail.joonix.net
                        // блокируется xxxx@joonix.net
                        // блокируется xxxx@joonix.com
                        // блокируется xxxx@joonix.org
        // вариант для любых доменов в которых есть badmail
            'badmail',  // блокируется xxxx@storebotmail.badmail.net
                        // блокируется xxxx@badmail.net
                        // блокируется xxxx@badmail.com
                        // блокируется xxxx@badmail.org
        ];
        foreach ($blockedDomains as $blockedDomain) {
            if (strpos($domain, $blockedDomain) !== false) {
                return false;
            }
        }

То есть массив $blockedDomains можно составить из стоп-слов, которые не должны встречаться в доменных именах электронной почты

PHP:
        // Блокируем конкретные домены
        $blockedDomains = [
        // вариант для любых доменов в которых есть joonix
            'joonix',
        // вариант для любых доменов в которых есть badmail
            'badmail',
        // вариант для любых доменов в которых есть spammail
            'spammail',
        // вариант для любых доменов в которых есть spamorder
            'spamorder',
        // любые сочетания символов, которые встречаются в нежелательной почте
        // через запятую
        ];
 
Это будет уж очень некрасиво.

Второй вариант проверки доменных имен в почте.
PHP:
        // На всякий случай обрежем пробелы
        // И сделаем все символы маленькими
        $email = trim(mb_strtolower($email));
            [$localPart, $domain] = explode('@', $email, 2);
        // Блокируем конкретные домены
        $blockedDomains = [
        // вариант строгий storebotmail.joonix.net
            'storebotmail.joonix.net', // блокируется xxxx@storebotmail.joonix.net
        // вариант строгий для joonix.net
            'joonix.net',   // блокируется xxxx@storebotmail.joonix.net
                            // блокируется xxxx@joonix.net
        // вариант для любых доменов в которых есть joonix
            'joonix',   // блокируется xxxx@storebotmail.joonix.net
                        // блокируется xxxx@joonix.net
                        // блокируется xxxx@joonix.com
                        // блокируется xxxx@joonix.org
        // вариант для любых доменов в которых есть badmail
            'badmail',  // блокируется xxxx@storebotmail.badmail.net
                        // блокируется xxxx@badmail.net
                        // блокируется xxxx@badmail.com
                        // блокируется xxxx@badmail.org
        ];
        foreach ($blockedDomains as $blockedDomain) {
            if (strpos($domain, $blockedDomain) !== false) {
                return false;
            }
        }

То есть массив $blockedDomains можно составить из стоп-слов, которые не должны встречаться в доменных именах электронной почты

PHP:
        // Блокируем конкретные домены
        $blockedDomains = [
        // вариант для любых доменов в которых есть joonix
            'joonix',
        // вариант для любых доменов в которых есть badmail
            'badmail',
        // вариант для любых доменов в которых есть spammail
            'spammail',
        // вариант для любых доменов в которых есть spamorder
            'spamorder',
        // любые сочетания символов, которые встречаются в нежелательной почте
        // через запятую
        ];
Благодарствую мил человек!
Вы помогаете и думаю не только мне - будем тестировать
для 1.6 бы найти вариант того же
а что нужно для 1.6 - какие файлы?
 
что нужно для 1.6
Все очень похоже будет

Должно работать на версии 1.6 (prestashop_1.6.1.15).

Файл для изменения classes/Validate.php
Это глобальная проверка вводимых значений.

Была такая функция
PHP:
    public static function isEmail($email)
    {
        return !empty($email) && preg_match(Tools::cleanNonUnicodeSupport('/^[a-z\p{L}0-9!#$%&\'*+\/=?^`{}|~_-]+[.a-z\p{L}0-9!#$%&\'*+\/=?^`{}|~_-]*@[a-z\p{L}0-9]+(?:[.]?[_a-z\p{L}0-9-])*\.[a-z\p{L}0-9]+$/ui'), $email);
    }

Нужно заменить на такую
PHP:
    public static function isEmail($email)
    {
        // Проверка на пустую строку
        if (empty($email)) {
            return false;
        }

        // На всякий случай обрежем пробелы
        // И сделаем все символы маленькими
        $email = trim(mb_strtolower($email));
            [$localPart, $domain] = explode('@', $email, 2);
        // Блокируем слова в доменных именах
        $blockedDomains = [
        // вариант для любых доменов в которых есть joonix
            'joonix',
        // вариант для любых доменов в которых есть badmail
            'badmail',
        ];
        foreach ($blockedDomains as $blockedDomain) {
            if (strpos($domain, $blockedDomain) !== false) {
                return false;
            }
        }

        // оставляем проверку, которая и была
        return preg_match(Tools::cleanNonUnicodeSupport('/^[a-z\p{L}0-9!#$%&\'*+\/=?^`{}|~_-]+[.a-z\p{L}0-9!#$%&\'*+\/=?^`{}|~_-]*@[a-z\p{L}0-9]+(?:[.]?[_a-z\p{L}0-9-])*\.[a-z\p{L}0-9]+$/ui'), $email);
    }

Проверьте, пожалуйста, и здесь все ли работает?
 
Все очень похоже будет

Должно работать на версии 1.6 (prestashop_1.6.1.15).

Файл для изменения classes/Validate.php
Это глобальная проверка вводимых значений.

Была такая функция
PHP:
    public static function isEmail($email)
    {
        return !empty($email) && preg_match(Tools::cleanNonUnicodeSupport('/^[a-z\p{L}0-9!#$%&\'*+\/=?^`{}|~_-]+[.a-z\p{L}0-9!#$%&\'*+\/=?^`{}|~_-]*@[a-z\p{L}0-9]+(?:[.]?[_a-z\p{L}0-9-])*\.[a-z\p{L}0-9]+$/ui'), $email);
    }

Нужно заменить на такую
PHP:
    public static function isEmail($email)
    {
        // Проверка на пустую строку
        if (empty($email)) {
            return false;
        }

        // На всякий случай обрежем пробелы
        // И сделаем все символы маленькими
        $email = trim(mb_strtolower($email));
            [$localPart, $domain] = explode('@', $email, 2);
        // Блокируем слова в доменных именах
        $blockedDomains = [
        // вариант для любых доменов в которых есть joonix
            'joonix',
        // вариант для любых доменов в которых есть badmail
            'badmail',
        ];
        foreach ($blockedDomains as $blockedDomain) {
            if (strpos($domain, $blockedDomain) !== false) {
                return false;
            }
        }

        // оставляем проверку, которая и была
        return preg_match(Tools::cleanNonUnicodeSupport('/^[a-z\p{L}0-9!#$%&\'*+\/=?^`{}|~_-]+[.a-z\p{L}0-9!#$%&\'*+\/=?^`{}|~_-]*@[a-z\p{L}0-9]+(?:[.]?[_a-z\p{L}0-9-])*\.[a-z\p{L}0-9]+$/ui'), $email);
    }

Проверьте, пожалуйста, и здесь все ли работает?
то есть получается это глобально для любого поля ввода?
а что происходит - когда вводится запретное значение - какое то сообщение выводится или просто недает нажать на кнопку отправить или оформить заказ?
 
Назад
Сверху