Предотвратить регистрацию спам аккаунта

10

Как предотвратить регистрацию спам-аккаунта, кроме включения CAPTCHA в формах (которые я уже пробовал)? Мы имеем дело с их постоянным потоком.

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

brackfost
источник
Или, если у кого-то были подобные проблемы, но повезло с модулями и т. Д., Пожалуйста, дайте мне знать.
brackfost

Ответы:

15

Мы прошли через ту же проблему: ограничение максимальной длины было легко обойдено (попробуйте сами, удалив класс max-length-25 из html).

Итак, вот что я нашел:

  • Решение 1. Блокировка по IP: каждая подписка на учетную запись использует разные IP-адреса от Колумбии до Вьетнама ...

  • Решение 2: Блокировка с помощью агента пользователя: это может быть подделкой ... Это работает, если вы хотите ограничить помарки сканеров.

  • Решение 3: Используйте HoneyPot: может работать, но если бот уже сфокусирован на вас, я думаю, он наверняка знает, какие поля отправлять (см .: https://magento.stackexchange.com/a/104261/50635 )

  • Решение 4: Captcha (Magento или Google): может работать, но некоторые люди говорят, что это было преодолено

  • Решение 5. Измените шаблон электронной почты и добавьте подтверждение по электронной почте :

    • Удаление входных данных, таких как {{var customer.name}}, {{var customer.firstname}} из шаблона /app/locale/[locale]/template/email/account_new.html, может предотвратить пометку бита как спама.
    • Добавьте подтверждение по электронной почте: Система> Конфигурация> Конфигурация клиента> Требовать подтверждение по электронной почте> Да
  • Решение 6. Обновите правила ограничения полей из базы данных: непосредственно в таблице customer_eav_attribute , обновите строки с attribute_id = 5 [firstname] и attribute_id = 7 [lastname] и замените 255 на 25 :

    • a:2:{s:15:"max_text_length";i:255;s:15:"min_text_length";i:1;}
    • по : a:2:{s:15:"max_text_length";i:25;s:15:"min_text_length";i:1;}

Решение 6 кажется самым быстрым и эффективным способом предотвращения спам-ботов, так как они используют более 25 символов.

С тех пор, больше не было поддельной учетной записи! Задача решена.


Если они попытаются с меньшим, это по крайней мере ограничит их в попытке фишинга.

Вы можете проверить, сколько пользователей уже имеют имя или фамилию длиной более 25 символов, в нашем случае это действительно незначительно:

SELECT ce.entity_id, ce.email, cev2.value AS firstname, cev3.value AS lastname
FROM customer_entity ce
-- first name
INNER JOIN customer_entity_varchar cev2 ON (ce.entity_id = cev2.entity_id AND cev2.attribute_id = 5)
-- last name
INNER JOIN customer_entity_varchar cev3 ON (ce.entity_id = cev3.entity_id AND cev3.attribute_id = 7)
WHERE CHAR_LENGTH(cev2.value)>25 or CHAR_LENGTH(cev3.value)>25

Для получения дополнительной информации, почему эти поддельные учетные записи зарегистрированы, читайте здесь: https://magento.stackexchange.com/a/240710/50635

DependencyHell
источник
1
Привет, Для решения 6 вы упомянули выше. Что я должен сделать для Magento 2.2.6? мой validate_rules показывает "{" max_text_length ": 225," min_text_length ": 1}", а также есть input_filter: "trim". я должен удалить это, и только отредактировать 225 к 25? спасибо
Крис Вэнь
Попробуйте заменить 225 на 25, затем проверьте, работает ли он
DependencyHell
2
Я попытался заменить 225 на 25 и вчера убрать «тримминг», но сегодня получаю новые спам. я только что открыл новый вопрос: magento.stackexchange.com/questions/266564/…
Крис Вэнь
1

Учитывая, что мы говорим о регистрации аккаунта, кажется, вы на правильном пути. Вы пытались изменить тему регистрации электронной почты?

это, вероятно, в приложении / locale / yourlanguage / template / email / account_new.html

Маркон Монтейру
источник
1

В качестве дополнительного примечания я удалил учетные записи спама со следующим кодом:

$customers = $this->getCustomerCollection();

$this->registry->register('isSecureArea', true);

function isRussian($text) {
    return preg_match('/[А-Яа-яЁё]/u', $text);
}

foreach($customers as $customer){
  $name = $customer->getName();
  if(isRussian($name)){
    $customer->delete();
  }
}
brackfost
источник
Это не решает проблему
Gezzasa
Лично я использовал решение DependencyHell 6. Просто хотел включить это на тот случай, если кому-то еще понадобится массовое удаление российского спама.
brackfost
Привет, как мне запустить этот код? я нахожусь на magento 2.2.6. спасибо
Крис Вэнь
Привет @KrisWen, я не уверен, заставит ли это других пользователей закатывать глаза, но я бы просто вставил шаблон в свой пользовательский модуль. В моем случае я вставил его, App/Code/Ibex/Deleter/view/frontend/templates/customer.phtmlа затем создал deleter_index_index.xmlфайл Deleter/view/frontend/layoutс <block class = "Ibex \ Deleter \ Block \ Delete" name = "delete" template = "Ibex_Deleter :: character.phtml" />, чтобы при Вы идете на yoursite.com/deleter, код будет работать. Просто обязательно деактивируйте и удалите модуль после этого.
brackfost
хаха спасибо! @TringestFool У меня есть некоторая путаница по поводу оригинального выбранного ответа. Вы случайно не знаете? -> «Привет, для решения 6, которое вы упомянули выше. Что я должен сделать для Magento 2.2.6? Мой validate_rules показывает« {«max_text_length»: 225, «min_text_length»: 1} », а также есть input_filter: "trim". Должен ли я удалить отделку и просто отредактировать число от 225 до 25? "
Крис Вэнь
1

Используйте cloudflare или другой брандмауэр, чтобы заблокировать некоторые страны, если можете. Китай, Гонконг, Россия. Однако это не останавливает весь спам и не работает, если вам, конечно, нужно, чтобы эти страны имели доступ. Но было полезно позволить мне на самом деле использовать админ-панель, так как сервер довольно сильно забивали.

Включите сборку в Google Recaptcha или используйте альтернативный плагин, если вы не обновили Magento до 2.3.0+

В Magento 2.3 для включения встроен Google reCAPTCHA.

1) Посетите магазины> Настройки> Конфигурация> Безопасность> Google reCAPTCHA 2) Создайте невидимую рекапчу Recaptcha v2 или я не бот-ключ. 3) Введите их в конфигурацию администратора на этой странице и включите ее в веб-интерфейсе для использования при создании пользователя.

Однако включение других функций не может повредить.

Для очистки существующих учетных записей найдите шаблоны в их входных данных и создайте запросы для их выбора, одновременно убедившись, что ваши обычные пользователи не являются частью этого набора данных.

Вы можете удалить их из таблицы customer_entity.

Пример SQL-кода с сайта, который я очистил: создайте свой собственный, так как он должен учитывать ваши обстоятельства, ваш набор данных и т. Д. Не возлагайте на меня ответственность, если вы уничтожите неправильных пользователей, сначала сделайте резервную копию!

DELETE FROM customer_entity
WHERE SUBSTRING_INDEX(email, '\@', -1) IN ('pp.com',
'sf-express.com',
'qqlong.com',
'kinohit.win',
'sohu.com',
'21cn.com',
'yeah.net',
'koreamail.com',
'aliyun.com',
'mail.ru',
'VIP.SINA.COM',
'yahoo.co.in',
'icload.com',
'sogou.com',
'vip.qq.com',
'sina.cn',
'189.cn',
'wo.com.cn',
'qq.cn',
'sina.com.cn',
'126.cn',
'yahoo.com.cn',
'3g.cn',
'163.com',
'167.com',
'139.com',
'126.com',
'130.com',
'144.com',
'123.com',
'ca800.com',
'168.com',
'188.com',
'1974.com',
'qq.co',
'sina.com',
'qq.com',
'qq.con',
'QQ.come',
'yandex.com',
'5ol.com',
'yeat.net',
'yahoo.cn')
OR lastname LIKE '%http://%'
OR lastname LIKE '%https://%'
OR lastname LIKE '%【%】%'
OR lastname LIKE '%tw55.cc%'
OR lastname LIKE '%www.ope2228.com%'

Убедитесь, что старая базовая Magento Captcha отключена. Клиенты> Конфигурация клиента> CAPTCHA

Включить CAPTCHA на витрине магазина: нет

Как это будет конфликтовать с Google reCAPTCHA ...

Официальная документация ссылки:

https://docs.magento.com/m2/ce/user_guide/configuration/security/google-recaptcha.html

https://docs.magento.com/m2/ce/user_guide/stores/security-google-recaptcha.html

Похоже, что боты просто попадают в конечную точку создания учетной записи (да, даже если вы удаляете кнопки / ссылки «Создать учетную запись» из своей темы), но рекомендуется удалить их учетные записи или деактивировать, поскольку они могут спать позже и спамить другие вещи, и они занимают место в твоя БД все равно ....

Удачи всем.

Лиам Митчелл
источник
0

Вы можете легко заблокировать домены и настроить отображение сообщения об ошибке, когда пользователь пытается зарегистрироваться в домене электронной почты в вашем черном списке. Полные инструкции заключаются в следующем -

Создайте новый модуль с именем EmailCheck в папке Ecomsolver

Шаг - 1 Напишите следующий код на панели администратора. Путь к файлу будет -Ecomsolver >EmailCheck > etc > Adminhtml > System

<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd"> <system> <tab id="ecomsolver" translate="label" sortOrder="999"> <label>Ecomsolver</label> </tab> <section id="emailblock" translate="label" sortOrder="130" showInDefault="1" showInWebsite="1" showInStore="1"> <class>separator-top</class> <label>Email Check</label> <tab>ecomsolver</tab> <resource>PixieMedia_General::general_config</resource> <group id="domains" translate="label" type="text" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1"> <label>Domain Names</label> <field id="domains" translate="label" type="textarea" sortOrder="1" showInDefault="1" showInWebsite="1" showInStore="1"> <label>Domain names to block</label> <comment>Comma separated values eg google.co.uk,mail.ru,some.com</comment> </field> <field id="message" translate="label" type="textarea" sortOrder="1" showInDefault="1" showInWebsite="1" showInStore="1"> <label>Message to display</label> <comment>The error message to show users who try to register with one of the above domain names</comment> </field> </group> </section> </system> </config>

Шаг - 2 Запишите следующий код в файл. Путь к файлу будет - Ecomsolver >EmailCheck > etc > Frontend > di

<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> <type name="Magento\Customer\Controller\Account\CreatePost"> <plugin name="restrictCustomerEmail" type="Ecomsolver\Emailcheck\Model\Plugin\Controller\Account\RestrictCustomerEmail"/> </type> </config>

Шаг - 3 Запишите следующий код в XML-файл с именем Config. Путь к файлу будет -Ecomsolver >EmailCheck > etc > Config

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd"> <default> <emailblock> <domains> <domains>163.com,mail.ru</domains> </domains> <message> <domains>We do not allow registration from your email domain</domains> </message> </emailblock> </default> </config>

Шаг - 4 Запишите следующий код в XML-файл с именем Module. Путь к файлу будет -Ecomsolver >EmailCheck > etc > Module

<config xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd"> <module name="Ecomsolver_Emailcheck" setup_version="1.0.0"> </module> </config>

Шаг - 5 Создайте имя папки Model в EmailCheck. Затем создайте подпапку Plugin > Controller > Account. Напишите следующий код в php-файле с именем RestrictCustomerEmail. Путь к файлу php будет -Ecomsolver >EmailCheck > Plugin > Controller > Account > RestrictCustomerEmail

/*Ecomsolver @@@@@@ ecomsolver@gmail.com*/ namespace Ecomsolver\Emailcheck\Model\Plugin\Controller\Account; use Magento\Framework\Controller\Result\RedirectFactory; use Magento\Framework\UrlFactory; use Magento\Framework\Message\ManagerInterface; use Magento\Framework\App\Config\ScopeConfigInterface; class RestrictCustomerEmail {

 /**
  * @var \Magento\Framework\UrlInterface
  */

protected $urlModel;

/**
 * @var \Magento\Framework\Controller\Result\RedirectFactory
 */

protected $resultRedirectFactory;

/**
 * @var \Magento\Framework\Message\ManagerInterface
 */
protected $messageManager;
/**
 * RestrictCustomerEmail constructor.
 * @param UrlFactory $urlFactory
 * @param RedirectFactory $redirectFactory
 * @param ManagerInterface $messageManager
 */
public function __construct(
    UrlFactory $urlFactory,
    RedirectFactory $redirectFactory,
    ManagerInterface $messageManager,
    ScopeConfigInterface $scopeConfig
)
{
    $this->urlModel = $urlFactory->create();
    $this->resultRedirectFactory = $redirectFactory;
    $this->messageManager = $messageManager;
    $this->scopeConfig = $scopeConfig;
}
/**
 * @param \Magento\Customer\Controller\Account\CreatePost $subject
 * @param \Closure $proceed
 * @return mixed
 * @throws \Magento\Framework\Exception\LocalizedException
 */
public function aroundExecute(
    \Magento\Customer\Controller\Account\CreatePost $subject,
    \Closure $proceed
)
{
    /** @var \Magento\Framework\App\RequestInterface $request */
    $email = $subject->getRequest()->getParam('email');
    list($nick, $domain) = explode('@', $email, 2); 
    $domains = $this->scopeConfig->getValue('emailblock/domains/domains', \Magento\Store\Model\ScopeInterface::SCOPE_STORE);
    if(!$domains) { 
        return $proceed; 
    }
    $domainArray = array_map('trim', explode(',', $domains));
    if(count($domainArray) < 1) { 
        return $proceed;
    }       
    if (in_array($domain, $domainArray, true)){
    $message = $this->scopeConfig->getValue('emailblock/domains/message', \Magento\Store\Model\ScopeInterface::SCOPE_STORE);
        if(!$message) { $message = __('We do not allow registration from your email domain'); }
        $this->messageManager->addErrorMessage($message);
        $defaultUrl = $this->urlModel->getUrl('*/*/create', ['_secure' => true]);
        /** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */
        $resultRedirect = $this->resultRedirectFactory->create();
        return $resultRedirect->setUrl($defaultUrl);
    }
    return $proceed();
}
}
Ecomsolver Private Limited
источник
-1

Я решил это, добавив следующий код в .htaccess как отладочную партию, я ничего не нашел, но когда создал одно событие при сохранении клиента после того, как получил это, а затем восстановил его сейчас.

<IfModule mod_rewrite.c>
    RewriteCond %{HTTP_USER_AGENT} "rv:40\.0\)\ Gecko/20100101\ Firefox/40\.1$" [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} "Gecko.*Gecko" [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} "Gecko/([a-z]|[A-Z])\." [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} "Gecko/\ " [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} "Gecko/20([2-9])" [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} "Gecko/201([1-9])"
</IfModule>
Сукумар Горай
источник
Привет, спасибо за ваш ответ. Что именно делает вышеперечисленное, и как вы определили, нацелились ли на Gecko и т. Д.?
brackfost
2
Я обнаружил это по событию сохранения клиента. Это русские боты. Таким образом, вы можете отключить их с помощью этого кода. Также, если это не работает, вам также нужно написать событие, когда клиент сохраняет и записать журнал для $ _Server и $ _request, а затем отладить его
Sukumar
Найденные пользовательские агенты: Mozilla / 5.0 (Windows NT 6.1; Win64; x64) AppleWebKit / 537.36 (KHTML, как Gecko) Chrome / 62.0.3202.94 Safari / 537.36 и Mozilla / 5.0 (Windows NT 10.0; WOW64; rv: 45.0) Gecko / 20100101 Firefox / 45.0
DependencyHell
Теперь вы можете добавить его в свой htaccess и решить проблему
Sukumar Gorai
Мы не можем заблокировать этот пользовательский агент, потому что у нас много посетителей с этим. Этот не определяет известного бота, но обычный пользовательский агент ...
DependencyHell