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

我对人们搜索的小贡献——这种防御称为蜜罐。所以你去。

在 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 回答
1

我不确定您到底要在这里做什么,但也许这会有所帮助。

标准控制器Mage_Contacts_IndexController位于此处:app/code/core/Mage/Contacts/controllers/IndexController.php

当然,您可能希望将其复制到local目录中,或者使用您自己的自定义模块扩展该类。您可以尝试使用此文件的副本。我希望这有帮助。

于 2012-04-06T19:52:33.003 回答
0

我认为您可以在主块中创建表单时放置隐藏字段,如下所示:

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

在此之后,您可以在 saveAction() 中检查它以检查这些值是否已设置

于 2013-05-15T10:16:14.197 回答