Empêcher l'enregistrement du compte de spam

10

Comment empêcher l'enregistrement de compte spam, à part activer CAPTCHA sur les formulaires (que j'ai déjà essayé)? Nous avons affaire à un flot constant d'entre eux.

Le champ du prénom est toujours des caractères russes, donc à défaut d'un itinéraire plus facile, peut-être un moyen de détecter un certain caractère et de bloquer l'enregistrement dans ce cas?

brackfost
la source
Ou si quelqu'un a eu des problèmes similaires mais a eu de la chance avec les modules, etc., faites le moi savoir.
brackfost

Réponses:

15

Nous sommes passés par le même problème, la limitation de la longueur maximale avant a été facilement contournée (essayez-la vous-même en supprimant la classe de longueur maximale-25 du HTML).

Voici donc ce que j'ai trouvé:

  • Solution 1: blocage via IP: chaque abonnement à un compte utilise une IP différente de la Colombie au Vietnam ...

  • Solution 2: blocage via l'agent utilisateur: il peut être truqué ... Cela fonctionne si vous souhaitez limiter les taches des robots.

  • Solution 3: utilisez HoneyPot: peut fonctionner, mais si le bot vous a déjà concentré, je pense qu'il sait sûrement quels champs publier (voir: https://magento.stackexchange.com/a/104261/50635 )

  • Solution 4: Captcha (Magento ou Google): peut fonctionner mais certaines personnes ont dit qu'il était dépassé

  • Solution 5: Modifier le modèle d'e-mail et ajouter l'e - mail de confirmation :

    • La suppression de données d'entrée telles que {{var customer.name}}, {{var customer.firstname}} du modèle /app/locale/[locale 3/8/template/email/account_new.html peut empêcher qu'un bit soit marqué comme spam.
    • Ajoutez l'e-mail de confirmation: Système> Configuration> Configuration client> Confirmation des e-mails requis> Oui
  • Solution 6: Mettez à jour les règles de limitation des champs à partir de la base de données: directement dans la table customer_eav_attribute , mettez à jour les lignes avec attribute_id = 5 [prénom] et attribute_id = 7 [nom] et remplacez 255 par 25 :

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

La solution 6 semble le moyen le plus rapide et le plus efficace de prévenir les spambots, car ils utilisent plus de 25 caractères.

Depuis, AUCUN PLUS DE FAUX COMPTE n'a été créé! Problème résolu.


S'ils essaient avec moins, cela les limitera au moins dans leur tentative de phishing.

Vous pouvez vérifier combien d'utilisateurs ont déjà un prénom ou un nom de famille de plus de 25 caractères, dans notre cas, vraiment mineur:

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

Pour plus d'informations sur la raison pour laquelle ces faux comptes sont enregistrés, lisez ici: https://magento.stackexchange.com/a/240710/50635

DependencyHell
la source
1
Salut, Pour la solution 6 que vous avez mentionnée ci-dessus. Que dois-je faire pour Magento 2.2.6? mes validate_rules montrent "{" max_text_length ": 225," min_text_length ": 1}", et il y a aussi un input_filter: "trim". dois-je supprimer cela et modifier simplement le 225 à 25? merci
Kris Wen
Essayez de remplacer 225 par 25, puis testez si cela fonctionne
DependencyHell
2
J'ai essayé de remplacer 225 par 25 et de retirer la "garniture" hier, mais j'obtiens toujours de nouveaux spams aujourd'hui. j'ai ouvert une nouvelle question tout à l'heure: magento.stackexchange.com/questions/266564/…
Kris Wen
1

Étant donné que nous parlons d'enregistrement de compte, il semble que vous soyez sur la bonne voie. Avez-vous essayé de changer le sujet d'enregistrement par e-mail?

c'est probablement sur app / locale / yourlanguage / template / email / account_new.html

Marcony Monteiro
la source
1

En complément, j'ai supprimé les comptes spam avec le code suivant:

$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
la source
Cela ne résout pas le problème
Gezzasa
Personnellement, j'ai utilisé la solution 6. de DependencyHell. Je voulais juste l'inclure au cas où quelqu'un d'autre aurait besoin de supprimer en masse le spam russe.
brackfost
Salut, comment dois-je exécuter ce code? je suis sur magento 2.2.6. merci
Kris Wen
Hé @KrisWen, je ne sais pas si cela incitera d'autres utilisateurs à lever les yeux au ciel, mais je mettrais simplement un modèle dans votre module personnalisé. Dans mon cas, je l'ai collé App/Code/Ibex/Deleter/view/frontend/templates/customer.phtmlpuis créé un deleter_index_index.xmlfichier Deleter/view/frontend/layoutavec <block class = "Ibex \ Deleter \ Block \ Delete" name = "delete" template = "Ibex_Deleter :: character.phtml" /> là-dedans de sorte que lorsque vous allez sur yoursite.com/deleter le code s'exécuterait. Assurez-vous simplement de désactiver et de supprimer le module par la suite.
brackfost
haha merci! @TryingestFool J'ai une certaine confusion au sujet de la réponse sélectionnée d'origine. Est-ce que vous savez? -> "Salut, Pour la solution 6 que vous avez mentionnée ci-dessus. Que dois-je faire pour Magento 2.2.6? Mes validate_rules affichent" {"max_text_length": 225, "min_text_length": 1} ", et il y a aussi un input_filter: "Trim". Dois-je supprimer le trim et simplement modifier le nombre de 225 à 25? "
Kris Wen
1

Utilisez cloudflare ou un autre pare-feu pour bloquer certains pays si vous le pouvez. Chine, Hong Kong, Russie. Cela n'empêche cependant pas tous les spams et ne fonctionne pas si vous avez besoin de ces pays pour pouvoir y accéder bien sûr. Mais il m'a été utile de me laisser réellement utiliser le panneau d'administration car le serveur devenait assez dur.

Activez la construction dans Google Recaptcha ou utilisez un plugin alternatif si vous n'avez pas mis à jour Magento vers 2.3.0+

Dans Magento 2.3 pour activer le reCAPTCHA intégré de Google.

1) Visitez Boutiques> Paramètres> Configuration> Sécurité> Google reCAPTCHA 2) Générez recaptcha invisible Recaptcha v2 ou je ne suis pas un bot de clés. 3) Saisissez-les dans la configuration d'administration sur cette page et activez-la sur le frontend pour une utilisation dans Create user.

Cependant, l'activation d'autres fonctionnalités ne peut pas vraiment nuire.

Pour nettoyer les comptes existants, recherchez des modèles dans leur entrée et créez des requêtes pour les sélectionner tout en vous assurant que vos utilisateurs normaux ne font pas partie de cet ensemble de données.

Vous pouvez les supprimer de la table customer_entity.

Exemple de SQL à partir d'un site que j'ai nettoyé: créez le vôtre car il devrait être conscient de vos circonstances, votre ensemble de données, etc. ne me tient pas responsable si vous effacez les mauvais utilisateurs, prenez la sauvegarde en premier!

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

Assurez-vous que l'ancien Magento Captcha de base est désactivé. Clients> Configuration client> CAPTCHA

Activer CAPTCHA sur la vitrine: Non

Comme il entrera en conflit avec le reCAPTCHA de Google ...

Liens vers la documentation officielle:

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

Les bots semblent juste toucher le point de terminaison de création de compte (Oui, même si vous supprimez les boutons / liens Créer un compte de votre thème), mais la suppression de leurs comptes ou leur désactivation est recommandée car ils pourraient dormir jusqu'à plus tard et spammer d'autres choses et utiliser de l'espace dans votre DB de toute façon ....

Bonne chance à tous.

Liam Mitchell
la source
0

Vous pouvez facilement mettre les domaines à bloquer et définir le message d'erreur à afficher lorsqu'un utilisateur tente de s'inscrire avec un domaine de messagerie sur votre liste de blocage. Les instructions complètes sont les suivantes -

Créez un nouveau module avec un nom EmailCheck dans le dossier Ecomsolver

Étape - 1 Écrivez le code suivant dans le panneau d'administration. Le chemin du fichier sera -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>

Étape - 2 Écrivez le code suivant dans un fichier. Le chemin du fichier sera - 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>

Étape - 3 Écrivez le code suivant dans un fichier XML avec le nom Config. Le chemin du fichier sera -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>

Étape - 4 Écrivez le code suivant dans un fichier XML avec le nom Module. Le chemin du fichier sera -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>

Étape - 5 Créez le nom du dossier Model dans EmailCheck. Créez ensuite un sous-dossier Plugin > Controller > Account. Écrivez le code suivant dans le fichier php avec le nom RestrictCustomerEmail. Le chemin du fichier php sera -Ecomsolver >EmailCheck > Plugin > Controller > Account > RestrictCustomerEmail

/*Ecomsolver @@@@@@ [email protected]*/ 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
la source
-1

Je l'ai résolu en ajoutant le code suivant à .htaccess en tant que lot de débogage, je n'ai rien trouvé, mais lorsque j'ai créé un événement sur la sauvegarde du client après l'avoir obtenu, puis son resloved maintenant.

<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>
Sukumar Gorai
la source
Bonjour, merci pour votre réponse. Que fait exactement ce qui précède et comment avez-vous décidé de cibler Gecko, etc.?
brackfost
2
Je l'ai détecté par événement de sauvegarde client. Ce sont des robots russes. Vous pouvez donc les désactiver par ce code. De plus, si cela ne fonctionne pas, vous devez également écrire un événement lorsque le client enregistre et écrire le journal pour $ _Server et $ _request, puis le déboguer
Sukumar Gorai
Agents utilisateurs trouvés: Mozilla / 5.0 (Windows NT 6.1; Win64; x64) AppleWebKit / 537.36 (KHTML, comme Gecko) Chrome / 62.0.3202.94 Safari / 537.36 et Mozilla / 5.0 (Windows NT 10.0; WOW64; rv: 45.0) Gecko / 20100101 Firefox / 45.0
DependencyHell
Maintenant, vous pouvez l'ajouter dans votre htaccess et résoudre le problème
Sukumar Gorai
Nous ne pouvons pas bloquer cet agent utilisateur car nous avons beaucoup de visiteurs avec celui-ci. Celui-ci ne spécifie pas un bot célèbre, mais un agent utilisateur commun ...
DependencyHell