ป้องกันการลงทะเบียนบัญชีสแปม


10

วิธีป้องกันการลงทะเบียนบัญชีสแปมนอกเหนือจากการเปิดใช้งาน CAPTCHA ในแบบฟอร์ม (ซึ่งฉันได้ลองแล้ว) เรากำลังเผชิญกับน้ำท่วมอย่างต่อเนื่อง

ฟิลด์ชื่อแรกเป็นตัวอักษรภาษารัสเซียเสมอดังนั้นการล้มเหลวในเส้นทางที่ง่ายขึ้นอาจเป็นวิธีที่จะตรวจจับตัวละครบางตัวและบล็อกการลงทะเบียนในกรณีนั้น


หรือถ้าใครมีปัญหาที่คล้ายกัน แต่มีโชคกับโมดูล ฯลฯ โปรดแจ้งให้เราทราบ
brackfost

คำตอบ:


15

เราพบปัญหาเดียวกันข้อ จำกัดความยาวสูงสุดของหน้าถูกข้ามไปอย่างง่ายดาย (ลองด้วยตัวคุณเองโดยลบคลาสที่มีความยาวสูงสุด 25จาก html)

ดังนั้นนี่คือสิ่งที่ฉันพบ:

  • โซลูชันที่ 1: การบล็อกผ่าน IP:การสมัครสมาชิกแต่ละบัญชีใช้ IP ที่แตกต่างจากโคลัมเบียไปยังเวียดนาม ...

  • โซลูชันที่ 2: การปิดกั้นผ่านตัวแทนผู้ใช้:มันสามารถแกล้ง ... มันทำงานถ้าคุณต้องการ จำกัด blots โปรแกรมรวบรวมข้อมูล

  • โซลูชันที่ 3: ใช้ HoneyPot:อาจใช้งานได้ แต่ถ้าบอทโฟกัสคุณอยู่แล้วฉันคิดว่ามันรู้ได้อย่างแน่นอนว่าจะโพสต์ฟิลด์ใด (ดู: https://magento.stackexchange.com/a/104261/50635 )

  • โซลูชันที่ 4: แคปต์ชา(Magento หรือ Google):อาจใช้งานได้ แต่บางคนบอกว่ามันผ่านแล้ว

  • โซลูชันที่ 5: แก้ไขแม่แบบอีเมลและเพิ่มอีเมลยืนยัน :

    • การลบข้อมูลอินพุตเช่น {{var customer.name}}, {{var customer.firstname}} ออกจาก/app/locale/هlocaleurrency/template/email/account_new.htmlแม่แบบสามารถป้องกันบิตที่ถูกทำเครื่องหมายว่าเป็นสแปม
    • เพิ่มการยืนยันอีเมล: ระบบ> การกำหนดค่า> การกำหนดค่าลูกค้า> ต้องการการยืนยันอีเมล> ใช่
  • โซลูชันที่ 6: อัปเดตกฎการ จำกัด ฟิลด์จากฐานข้อมูล:โดยตรงในตารางcustomer_eav_attributeอัพเดตแถวด้วยattribute_id = 5 [ชื่อแรก] และattribute_id = 7 [นามสกุล] และแทนที่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


1
สวัสดีสำหรับวิธีแก้ปัญหาที่ 6 ที่คุณกล่าวถึงข้างต้น ฉันควรทำอย่างไรกับ Magento 2.2.6 validate_rules ของฉันแสดง "{" max_text_length ": 225," min_text_length ": 1}" และยังมี input_filter: "trim" ฉันควรลบสิ่งนั้นและเพียงแก้ไข 225 ถึง 25? ขอบคุณ
Kris Wen

พยายามแทนที่ 225 ด้วย 25 แล้วทดสอบว่ามันใช้งานได้หรือไม่
DependencyHell

2
ฉันลองแทนที่ 225 ด้วย 25 และถอด "trim" เมื่อวานนี้ แต่ยังคงได้รับ spams ใหม่วันนี้ ฉันเปิดคำถามใหม่เมื่อไม่นานมานี้: magento.stackexchange.com/questions/266564/…
Kris Wen

1

พิจารณาว่าเรากำลังพูดถึงการลงทะเบียนบัญชีดูเหมือนว่าคุณกำลังมาถูกทางแล้ว คุณลองเปลี่ยนหัวข้อการลงทะเบียนอีเมลหรือไม่

มันอาจเป็นไปได้ในแอพ / สถานที่ / yourlanguage / แม่แบบ / อีเมล / บัญชี _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();
  }
}

สิ่งนี้ไม่ได้แก้ปัญหา
Gezzasa

โดยส่วนตัวแล้วฉันใช้โซลูชันของ DependencyHell 6 แค่ต้องการรวมไว้ในกรณีที่มีคนอื่นต้องการลบสแปมรัสเซียจำนวนมาก
brackfost

สวัสดีฉันจะเรียกใช้รหัสนี้อย่างไร ฉันใช้วีโอไอพี 2.2.6 ขอบคุณ
Kris Wen

เฮ้ @KrisWen ฉันไม่แน่ใจว่าสิ่งนี้จะทำให้ผู้ใช้รายอื่นสะดุดตา แต่ฉันแค่ใส่เทมเพลตในโมดูลที่กำหนดเองของคุณ ในกรณีของฉันฉันติดมันApp/Code/Ibex/Deleter/view/frontend/templates/customer.phtmlแล้วทำdeleter_index_index.xmlไฟล์Deleter/view/frontend/layoutด้วย <block class = "Ibex \ Deleter \ Block \ Delete" ชื่อ = "ลบ" แม่แบบ = "Ibex_Deleter :: character.phtml" /> ในนั้นเพื่อเมื่อ คุณไปที่ yoursite.com/deleter รหัสจะทำงาน เพียงให้แน่ใจว่าได้ปิดการใช้งานและลบโมดูลในภายหลัง
brackfost

ฮ่าฮ่าขอบคุณ! @TryingestFool ฉันมีความสับสนเกี่ยวกับคำตอบดั้งเดิมที่เลือก คุณรู้หรือไม่ -> "สวัสดีสำหรับโซลูชัน 6 ที่คุณกล่าวถึงข้างต้นฉันควรทำอย่างไรกับ Magento 2.2.6? validate_rules ของฉันจะแสดง" {"max_text_length": 225, "min_text_length": 1} "และยังมี input_filter: "trim". ฉันควรจะเอา trim ออกไปและเพียงแค่แก้ไขหมายเลขจาก 225 เป็น 25 "
Kris Wen

1

ใช้ cloudflare หรือไฟร์วอลล์อื่น ๆ เพื่อบล็อกบางประเทศหากทำได้ จีนฮ่องกงรัสเซีย สิ่งนี้ไม่ได้หยุดยั้งสแปมทั้งหมดและไม่สามารถใช้งานได้หากคุณต้องการให้ประเทศเหล่านั้นสามารถเข้าถึงได้ แต่มันก็มีประโยชน์ที่จะให้ฉันใช้แผงควบคุมของผู้ดูแลระบบเพราะเซิร์ฟเวอร์เริ่มใช้งานหนักมาก

เปิดใช้งานบิลด์ใน Google Recaptcha หรือใช้ปลั๊กอินเสริมหากคุณไม่ได้อัปเดต Magento เป็น 2.3.0+

ใน Magento 2.3 เพื่อเปิดใช้งาน Google reCAPTCHA ในตัว

1) เยี่ยมชมร้านค้า> การตั้งค่า> การกำหนดค่า> ความปลอดภัย> Google reCAPTCHA 2) สร้าง Recaptcha v2 recaptcha ที่มองไม่เห็นไม่ได้หรือฉันไม่ได้เป็นบอทคีย์ 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

บอทดูเหมือนจะไปถึงจุดสิ้นสุดการสร้างบัญชี (ใช่แม้ว่าคุณจะลบปุ่ม / ลิงก์สร้างบัญชีจากธีมของคุณ) แต่แนะนำให้ลบบัญชีหรือยกเลิกการใช้งานเนื่องจากพวกเขาสามารถนอนหลับได้ในภายหลังและสแปมในพื้นที่อื่น ๆ DB ของคุณต่อไป ....

โชคดีนะทุกคน.


0

คุณสามารถใส่โดเมนเพื่อบล็อกและตั้งค่าข้อความแสดงข้อผิดพลาดได้อย่างง่ายดายเมื่อผู้ใช้พยายามลงทะเบียนกับโดเมนอีเมลในรายการบล็อกของคุณ คำแนะนำแบบเต็มมีดังนี้ -

สร้างโมดูลใหม่ด้วยชื่อ EmailCheck ในโฟลเดอร์ Ecomsolver

ขั้นตอน - 1 เขียนรหัสต่อไปนี้ที่แผง admin เส้นทางของไฟล์จะเป็น -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 ที่มีชื่อกำหนดค่า เส้นทางของไฟล์จะเป็น -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 ที่มีชื่อโมดูล เส้นทางของไฟล์จะเป็น -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 สร้างชื่อโฟลเดอร์รุ่นใน 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();
}
}

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

สวัสดีขอบคุณสำหรับคำตอบของคุณ สิ่งที่กล่าวมาข้างต้นทำในสิ่งที่ถูกต้องและคุณกำหนดเป้าหมายไปที่ตุ๊กแก ฯลฯ ได้อย่างไร
brackfost

2
ฉันตรวจพบโดยลูกค้าบันทึกเหตุการณ์ นี่คือบอทรัสเซีย ดังนั้นคุณสามารถปิดการใช้งานพวกเขาด้วยรหัสที่ นอกจากนี้ถ้ามันไม่ทำงานคุณต้องเขียนเหตุการณ์เมื่อลูกค้าบันทึกและเขียนบันทึกสำหรับ $ _Server และ $ _request จากนั้นทำการดีบัก
Sukumar Gorai

พบตัวแทนผู้ใช้: 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) 20100101 Firefox / 45.0
พึ่งพา

ตอนนี้คุณสามารถเพิ่มลงใน htaccess ของคุณและแก้ปัญหาได้
Sukumar Gorai

เราไม่สามารถบล็อกตัวแทนผู้ใช้นี้เพราะเรามีผู้เข้าชมจำนวนมากด้วยอันนี้ อันนี้ไม่ได้ระบุบอทที่มีชื่อเสียง แต่เป็นตัวแทนผู้ใช้ทั่วไป ...
DependencyHell
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.