Zapobiegaj rejestracji kont spamowych


10

Jak zapobiec rejestracji konta spamowego oprócz włączenia CAPTCHA w formularzach (które już wypróbowałem)? Mamy do czynienia z ich ciągłą powodzią.

Pierwsze imię to zawsze rosyjskie znaki, więc brak łatwiejszej trasy, może to sposób na wykrycie określonego znaku i zablokowanie rejestracji w takim przypadku?


Lub jeśli ktoś miał podobne problemy, ale miał szczęście z modułami itp., Daj mi znać.
— nawias

Odpowiedzi:


15

Przeszliśmy przez ten sam problem, przednie ograniczenie maksymalnej długości zostało łatwo ominięte (spróbuj sam, usuwając klasę maksymalnej długości 25 z HTML).

Oto, co znalazłem:

  • Rozwiązanie 1: Blokowanie za pomocą adresu IP: każda subskrypcja konta używa innego adresu IP od Kolumbii do Wietnamu ...

  • Rozwiązanie 2: Blokowanie za pomocą agenta użytkownika: można go sfałszować ... Działa, jeśli chcesz ograniczyć liczbę przeszukiwaczy.

  • Rozwiązanie 3: Użyj HoneyPot: może działać , ale jeśli bot już Cię skupił, myślę, że z pewnością wie, które pola opublikować (patrz: https://magento.stackexchange.com/a/104261/50635 )

  • Rozwiązanie 4: Captcha (Magento lub Google): może działać, ale niektórzy twierdzą, że został przekroczony

  • Rozwiązanie 5: Edytuj szablon wiadomości e-mail i dodaj wiadomość e-mail z potwierdzeniem :

    • Usunięcie danych wejściowych takich jak {{var klient.nazwa}}, {{var klient.nazwa}} z szablonu /app/locale/[locale]/template/email/account_new.html może zapobiec oznaczeniu fragmentu jako spamu.
    • Dodaj potwierdzenie e-mail: System> Konfiguracja> Konfiguracja klienta> Wymagaj potwierdzenia wiadomości e-mail> Tak
  • Rozwiązanie 6: Obszary zasady przedawnienia z bazy danych: bezpośrednio w customer_eav_attribute tabeli, aktualizować wiersze z attribute_id = 5 [Imię] i attribute_id = 7 [Nazwisko] i zastąpić 255 przez 25 :

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

Rozwiązanie 6 wydaje się najszybszym i najbardziej skutecznym sposobem zapobiegania robotom spamującym, ponieważ używają one więcej niż 25 znaków.

Od tego czasu nie utworzono WIĘCEJ FAKE KONTA! Problem rozwiązany.


Jeśli spróbują z mniejszą ilością, ograniczy to przynajmniej ich próbę phishingu.

Możesz sprawdzić, ilu użytkowników ma już imię lub nazwisko składające się z ponad 25 znaków, w naszym przypadku naprawdę niewielkie:

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

Aby uzyskać więcej informacji o tym, dlaczego te fałszywe konta są zarejestrowane, przeczytaj tutaj: https://magento.stackexchange.com/a/240710/50635


1
Cześć, w przypadku rozwiązania 6 wspomnianego powyżej. Co powinienem zrobić dla Magento 2.2.6? moje validate_rules pokazuje „{” max_text_length ”: 225,„ min_text_length ”: 1}”, a także filtr_wejściowy: „przycinanie”. powinienem to usunąć i po prostu edytować 225 do 25? dzięki
— Kris Wen

Spróbuj zamienić 225 na 25, a następnie sprawdź, czy to działa
— DependencyHell,

2
próbowałem zastąpić 225 przez 25 i wyjąć wczoraj „przycinanie”, ale wciąż otrzymuję nowe spamy. otworzyłem nowe pytanie właśnie teraz: magento.stackexchange.com/questions/266564/...
— Kris Wen

1

Biorąc pod uwagę, że mówimy o rejestracji konta, wydaje się, że jesteś na dobrej drodze. Czy próbowałeś zmienić temat rejestracji e-mail?

prawdopodobnie znajduje się w app / locale / yourlanguage / template / email / account_new.html


1

Jako dodatkową notatkę usunąłem konta spamowe następującym kodem:

$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();
  }
}

To nie rozwiązuje problemu
— Gezzasa,

Osobiście korzystałem z rozwiązania DependencyHell 6. Chciałem tylko to uwzględnić na wypadek, gdyby ktoś inny musiał masowo usunąć rosyjski spam.
— nawias kwadratowy

Cześć, jak powinienem uruchomić ten kod? Jestem na Magento 2.2.6. dzięki
— Kris Wen

Hej @KrisWen, nie jestem pewien, czy to spowoduje, że inni użytkownicy przewrócą oczami, ale po prostu wstawiłbym szablon w niestandardowym module. W moim przypadku włożyłem go, App/Code/Ibex/Deleter/view/frontend/templates/customer.phtmla następnie utworzyłem deleter_index_index.xmlplik Deleter/view/frontend/layoutz <class class = "Ibex \ Deleter \ Block \ Delete" name = "delete" template = "Ibex_Deleter :: character.phtml" />, tak że kiedy wejdziesz na twoją stronę.com/deleter, aby uruchomić kod. Pamiętaj tylko, aby później wyłączyć i usunąć moduł.
— nawias

haha dziękuje! @TryingestFool Mam pewne wątpliwości co do pierwotnie wybranej odpowiedzi. nie wiesz przypadkiem? -> „Cześć, w przypadku rozwiązania 6, o którym wspominałeś powyżej. Co powinienem zrobić dla Magento 2.2.6? Moje validate_rules pokazuje„ {„max_text_length”: 225, „min_text_length": 1} ”, a także filtr wejściowy: „przycinanie”. czy powinienem usunąć przycięcie i po prostu edytować numer od 225 do 25? ”
— Kris Wen

1

Użyj Cloudflare lub innej zapory ogniowej, aby zablokować niektóre kraje, jeśli możesz. Chiny, Hongkong, Rosja. Nie zatrzymuje to jednak całego spamu i nie działa, jeśli potrzebujesz, aby te kraje miały oczywiście dostęp. Pomogło mi jednak korzystać z panelu administracyjnego, ponieważ serwer był dość mocno wbijany.

Włącz kompilację w Google Recaptcha lub użyj alternatywnej wtyczki, jeśli nie zaktualizowałeś Magento do wersji 2.3.0+

W Magento 2.3, aby włączyć wbudowaną Google reCAPTCHA.

1) Odwiedź Sklepy> Ustawienia> Konfiguracja> Bezpieczeństwo> Google reCAPTCHA 2) Generuj Recaptcha v2 niewidzialną recaptcha lub nie jestem kluczem bota. 3) Wprowadź je do konfiguracji administratora na tej stronie i włącz ją w interfejsie użytkownika do użycia w Utwórz użytkownika.

Włączenie innych funkcji nie może jednak tak naprawdę zaszkodzić.

Aby wyczyścić istniejące konta, znajdź wzorce w danych wejściowych i utwórz zapytania, aby je wybrać, upewniając się, że zwykli użytkownicy nie są częścią tego zestawu danych.

Możesz je usunąć z tabeli user_entity.

Przykład SQL ze strony, którą wyczyściłem: Stwórz własną, ponieważ musiałabyś pamiętać o swoich okolicznościach, twój zestaw danych itp. Nie pociągają mnie do odpowiedzialności, jeśli wyczyścisz niewłaściwych użytkowników, najpierw wykonaj kopię zapasową!

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

Upewnij się, że stara podstawowa Magento Captcha jest wyłączona. Klienci> Konfiguracja klienta> CAPTCHA

Włącz CAPTCHA w witrynie Storefront: Nie

Ponieważ będzie to kolidować z Google reCAPTCHA ...

Oficjalne linki do dokumentacji:

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

Boty wydają się uderzać w punkt końcowy tworzenia konta (Tak, nawet jeśli usuniesz przyciski / łącza Utwórz konto z motywu), ale zaleca się usunięcie ich kont lub dezaktywację, ponieważ mogą spać do później i spamować inne rzeczy, a także zajmują miejsce w i tak twoja baza danych ....

Powodzenia wszystkim.


0

Domeny można łatwo zablokować i ustawić komunikat o błędzie wyświetlany, gdy użytkownik próbuje zarejestrować się w domenie e-mail na liście zablokowanych. Pełne instrukcje są następujące -

Utwórz nowy moduł o nazwie EmailCheck w folderze Ecomsolver

Krok - 1 Wpisz następujący kod w panelu administracyjnym. Ścieżka do pliku będzie -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>

Krok - 2 Wpisz następujący kod do pliku. Ścieżka do pliku będzie - 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>

Krok - 3 Wpisz następujący kod w pliku XML o nazwie Config. Ścieżka do pliku będzie -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>

Krok - 4 Wpisz następujący kod w pliku XML o nazwie Module. Ścieżka do pliku będzie -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>

Krok - 5 Utwórz nazwę folderu Model w EmailCheck. Następnie utwórz podfolder Plugin > Controller > Account. Napisz następujący kod w pliku php o nazwie RestrictCustomerEmail. Ścieżka do pliku php będzie -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();
}
}

-1

Rozwiązałem go, dodając następujący kod do .htaccess jako partii debugującej, nie znalazłem niczego, ale kiedy utworzyłem jedno zdarzenie w zapisie klienta po tym, jak to otrzymałem, a potem jest ono ponownie zapisane.

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

Cześć, dzięki za odpowiedź. Co dokładnie robi powyższe i jak zdecydowałeś się celować w Gecko itp.?
— wspornik

2
Wykryłem to przez zdarzenie zapisu klienta. To rosyjskie boty. Możesz je wyłączyć za pomocą tego kodu. Również, jeśli to nie zadziała, musisz również napisać zdarzenie, gdy klient zapisuje i zapisać dziennik dla $ _Server i $ _request, a następnie debugować
— Sukumar Gorai

Znaleziono programy użytkownika: Mozilla / 5.0 (Windows NT 6.1; Win64; x64) AppleWebKit / 537.36 (KHTML, jak Gecko) Chrome / 62.0.3202.94 Safari / 537.36 i Mozilla / 5.0 (Windows NT 10.0; WOW64; rv: 45.0) Gecko / 20100101 Firefox / 45.0
— Zależność

Teraz możesz dodać go do swojego htaccess i rozwiązać problem
— Sukumar Gorai

Nie możemy zablokować tego klienta użytkownika, ponieważ mamy wielu odwiedzających go. Ten nie określa słynnego bota, ale zwykłego agenta użytkownika ...
— DependencyHell
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.