我偶尔会收到来自我的 Magento 商店的联系表格的垃圾邮件。我不愿意添加验证码,所以想尝试在表单中添加一个隐藏字段。如果该字段被填写,则不会提交表单(大多数机器人会自动填写所有字段)。
我知道如何添加字段,但是如果字段有值,是否有人知道如何/在哪里添加代码以拒绝表单?
谢谢!
我偶尔会收到来自我的 Magento 商店的联系表格的垃圾邮件。我不愿意添加验证码,所以想尝试在表单中添加一个隐藏字段。如果该字段被填写,则不会提交表单(大多数机器人会自动填写所有字段)。
我知道如何添加字段,但是如果字段有值,是否有人知道如何/在哪里添加代码以拒绝表单?
谢谢!
首先,您需要知道联系人表单请求的控制器操作。如果您还不知道,请检查action
您的参数<form>
,或使用Fiddler,或使用某些浏览器特定工具(如 Firebug 等)来查找。
接下来,由您自己覆盖找到的控制器操作。
最后,在您的覆盖操作中,放置
$sMyHiddenField = $this->getRequest()->getParam('my_hidden_field', '');
if ($sMyHiddenField) {
$this->_forward('noRoute'); // or whatever
}
去抓。
我对人们搜索的小贡献——这种防御称为蜜罐。所以你去。
在 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
。
我不确定您到底要在这里做什么,但也许这会有所帮助。
标准控制器Mage_Contacts_IndexController
位于此处:app/code/core/Mage/Contacts/controllers/IndexController.php
当然,您可能希望将其复制到local
目录中,或者使用您自己的自定义模块扩展该类。您可以尝试使用此文件的副本。我希望这有帮助。
我认为您可以在主块中创建表单时放置隐藏字段,如下所示:
$fieldset->addField('entity_type_id', 'hidden', array(
'name' => 'entity_type_id',
'value' => 11
));
在此之后,您可以在 saveAction() 中检查它以检查这些值是否已设置