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?

nawias kwadratowy
źródło
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

DependencyHell
źródło
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

Marcony Monteiro
źródło
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();
  }
}
nawias kwadratowy
źródło
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.

Liam Mitchell
źródło
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 @@@@@@ [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
źródło
-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>
Sukumar Gorai
źródło
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