Magentoストアの連絡フォームからときどきスパムが発生しています。キャプチャを追加するのは気が進まないので、フォームに非表示のフィールドを追加してみます。フィールドに入力すると、フォームは送信されません(ほとんどのボットは自動的にすべてのフィールドに入力します)。
フィールドを追加する方法は知っていますが、フィールドに値がある場合にフォームを拒否するコードを追加する方法/場所を知っている人はいますか?
ありがとう!
Magentoストアの連絡フォームからときどきスパムが発生しています。キャプチャを追加するのは気が進まないので、フォームに非表示のフィールドを追加してみます。フィールドに入力すると、フォームは送信されません(ほとんどのボットは自動的にすべてのフィールドに入力します)。
フィールドを追加する方法は知っていますが、フィールドに値がある場合にフォームを拒否するコードを追加する方法/場所を知っている人はいますか?
ありがとう!
まず、連絡先フォームから要求されているコントローラーのアクションを知る必要があります。まだわからない場合は、のaction
パラメータを確認する<form>
か、Fiddlerを使用するか、ブラウザ固有のツール(Firebugなど)を使用して調べてください。
次に、見つかったコントローラーアクションを自分でオーバーライドします。
最後に、オーバーライドされたアクションに、
$sMyHiddenField = $this->getRequest()->getParam('my_hidden_field', '');
if ($sMyHiddenField) {
$this->_forward('noRoute'); // or whatever
}
捕まえる。
ここで何をしようとしているのか正確にはわかりませんが、おそらくこれが役立つでしょう。
標準のコントローラーは次のMage_Contacts_IndexController
場所にあります:app / code / core / Mage / Contacts / controllers / IndexController.php
もちろん、それをlocal
ディレクトリにコピーするか、独自のカスタムモジュールでクラスを拡張することをお勧めします。このファイルのコピーを使用してみてください。これがお役に立てば幸いです。
検索する人々への私のマイナーな貢献-この種の防御はハニーポットと呼ばれます。さあ、行きます。
Magento 1.3.2では、コントローラーのコピーの75行目にこれを追加しましたcode/local/Mage/Contacts/controllers/IndexController.php
。
// check the spam honeypot
if (!empty($post['yummy'])) {
$error = true;
}
ここで、「yummy」は、で追加した非表示フィールドですtemplate/contacts/form.phtml
。
次のようにメインブロックにフォームを作成するときに、非表示のフィールドを配置できると思います。
$fieldset->addField('entity_type_id', 'hidden', array(
'name' => 'entity_type_id',
'value' => 11
));
この後、saveAction()でチェックして、これらの値が設定されているかどうかを確認できます