0

Magentoストアの連絡フォームからときどきスパムが発生しています。キャプチャを追加するのは気が進まないので、フォームに非表示のフィールドを追加してみます。フィールドに入力すると、フォームは送信されません(ほとんどのボットは自動的にすべてのフィールドに入力します)。

フィールドを追加する方法は知っていますが、フィールドに値がある場合にフォームを拒否するコードを追加する方法/場所を知っている人はいますか?

ありがとう!

4

4 に答える 4

2

まず、連絡先フォームから要求されているコントローラーのアクションを知る必要があります。まだわからない場合は、のactionパラメータを確認する<form>か、Fiddlerを使用するか、ブラウザ固有のツール(Firebugなど)を使用して調べてください。

次に、見つかったコントローラーアクションを自分でオーバーライドします。

最後に、オーバーライドされたアクションに、

$sMyHiddenField = $this->getRequest()->getParam('my_hidden_field', '');
if ($sMyHiddenField) {
    $this->_forward('noRoute');    // or whatever
}

捕まえる。

于 2012-04-07T10:52:05.593 に答える
1

ここで何をしようとしているのか正確にはわかりませんが、おそらくこれが役立つでしょう。

標準のコントローラーは次のMage_Contacts_IndexController場所にあります:app / code / core / Mage / Contacts / controllers / IndexController.php

もちろん、それをlocalディレクトリにコピーするか、独自のカスタムモジュールでクラスを拡張することをお勧めします。このファイルのコピーを使用してみてください。これがお役に立てば幸いです。

于 2012-04-06T19:52:33.003 に答える
1

検索する人々への私のマイナーな貢献-この種の防御はハニーポットと呼ばれます。さあ、行きます。

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

于 2012-04-27T09:25:08.620 に答える
0

次のようにメインブロックにフォームを作成するときに、非表示のフィールドを配置できると思います。

$fieldset->addField('entity_type_id', 'hidden', array(
      'name'               => 'entity_type_id',
      'value'              => 11
));

この後、saveAction()でチェックして、これらの値が設定されているかどうかを確認できます

于 2013-05-15T10:16:14.197 に答える