回答:
同じ問題が発生しましたが、前のmaxlength制限は簡単に回避されました(htmlからmaximum-length-25クラスを削除して、自分で試してください)。
だからここに私が見つけたものがあります:
解決策1:IPによるブロック:各アカウントのサブスクリプションは、コロンビアからベトナムへの異なるIPを使用します...
解決策2:ユーザーエージェントによるブロック:偽装される可能性があります...クローラーのしみを制限する場合に機能します。
解決策3:HoneyPotを使用する:機能する可能性がありますが、ボットがすでに集中している場合は、投稿するフィールドが確実にわかっていると思います(https://magento.stackexchange.com/a/104261/50635を参照)
解決策4:Captcha(MagentoまたはGoogle):機能する可能性がありますが、一部のユーザーはそれが回避されたと言いました
解決策5:メールテンプレートを編集して確認メールを追加する:
溶液6 :更新データベースから制限ルールをフィールドに直接にcustomer_eav_attributeすると、テーブル更新行をATTRIBUTE_ID = 5 [姓]と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
私たちはアカウント登録について話していることを考えると、あなたは正しい方向に進んでいるようです。メール登録件名を変更してみましたか?
おそらくapp / locale / yourlanguage / template / email / account_new.htmlにあります
補足として、次のコードを使用してスパムアカウントを削除しました。
$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();
}
}
App/Code/Ibex/Deleter/view/frontend/templates/customer.phtml
作った後とdeleter_index_index.xml
で、ファイルをDeleter/view/frontend/layout
そのときにそこに<ブロッククラス=「アイベックス\ DELETER \ブロック\削除」名前=「削除」テンプレート=「Ibex_Deleter :: character.phtml」/>とコードが実行されるyoursite.com/deleterに移動します。後でモジュールを非アクティブ化して削除してください。
可能であれば、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
ストアフロントでキャプチャを有効にする:いいえ
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 ...
皆さん頑張ってください。
ブロックするドメインを簡単に設定し、ユーザーがブロックリストのメールドメインに登録しようとしたときに表示されるエラーメッセージを設定できます。詳細な手順は次のとおりです–
EcomsolverフォルダーにEmailCheckという名前の新しいモジュールを作成します。
ステップ– 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次のコードをConfigという名前の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 Moduleという名前の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でフォルダー名Modelを作成します。次に、サブフォルダーを作成しますPlugin > Controller > Account
。次のコードを、RestrictCustomerEmailという名前のphpファイルに記述します。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();
}
}
デバッグロットとして次のコードを.htaccessに追加して解決しましたが、何も見つかりませんでしたが、これを取得した後、顧客の保存で1つのイベントを作成すると、再び愛されました。
<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>