0

任何人都可以建议在表单上对抗垃圾邮件的最佳方法 - 我们已经设置了验证码,但垃圾邮件似乎仍在进入。

是否可以执行以下操作...在表单上检查 POST 请求是否来自从该站点提交的表单(而不是使用相同操作的表单)。如果请求来自该站点,则接受否则不要&简单地忽略该请求。

另外 - 是否有可能在服务器端做一些事情来阻止 DDOS 风格的攻击 - 因为我们网站的垃圾邮件发送者似乎在很短的时间内发送了数千个请求。

任何人都可以为 Codeigniter (v2) 推荐任何其他不会过多妨碍用户的良好反垃圾邮件方法。提前致谢。

4

3 回答 3

10

任何人都可以建议在表单上对抗垃圾邮件的最佳方法 - 我们已经设置了验证码,但垃圾邮件似乎仍在进入。

我喜欢“蜜罐”技术。基本上在您的表单上放置一个隐藏字段,其值为空。验证字段作为表单提交的一部分。如果字段 != 空 - 那么它是一个机器人,所以提交失败。机器人往往只是自动填写表单上的所有字段。

是否可以执行以下操作...在表单上检查 POST 请求是否来自从该站点提交的表单(而不是使用相同操作的表单)。如果请求来自该站点,则接受否则不要&简单地忽略该请求。

是的——它叫做 CSRF——Codeigniter 内置了它。在你的配置文件中打开它,并在你的表单上使用 form_open()。就是这样

另外 - 是否有可能在服务器端做一些事情来阻止 DDOS 风格的攻击 - 因为我们网站的垃圾邮件发送者似乎在很短的时间内发送了数千个请求。

是的 - 在您的会话中为每个用户添加一个“最后提交”字段。或者IP。或者您想跟踪垃圾邮件发送者。在每次提交表单时,检查最后一次提交时间,如果它小于 X 秒(其中 X 是您觉得舒服的任何数字 - 说 5 秒) - 然后由于提交太频繁而导致表单失败。

另一种选择是记录表单何时“送达”给用户,并且如果在请求后 X 秒后也会失败(即普通人需要 30 秒来填写您的表单 - 所以 2 秒意味着机器人)。

ps 使用上述方法意味着您将能够删除验证码:)

于 2012-06-08T12:11:45.997 回答
7

好吧,我实际上已经通过一个非常简单的解决方案取得了很大的成功。

创建一个 CSS 类:

.magic /* Call it whatever you want
{
  display: none;
}

在您的表单中插入类似这样的内容:

<form method="post" action="">
<p>
  <label>Name</label>
  <input type="text" name="name">
<p>
<!-- and the magic -->
<p class="magic">
  <input type="text" name="email"> <!-- spam bots LOVES 'email' fields ;) -->
</p>
<!-- /end magic -->

<p>
  <label>Real E-mail input field</label>
  <input type="text" name="some_email">
</p>
</form>

在您的控制器中,您可以执行以下操作:

...
public function create_post()
{
   $this->form_validation... // If you use form validation
   [...]
   // If all regular validations are true, do the last bit

  if( $this->input->post('email') == "" ) //If something is in the 'email' field, it has propbably been filled by a bot, because regular users can't see the field.
  {
    $this->your_model->insert_the_post($data);
  }
  // otherwise, pretend like nothing.

}

您的用户将永远不会看到这一点 - 这让我多年来一直没有垃圾邮件。简单 - 但有效。

于 2012-06-08T12:22:27.090 回答
0

最有可能的是,您会在验证码中放置字典或一些产品词。我在使用 codeigniter 时遇到了同样的垃圾邮件问题。然后我放了一些强有力的词,比如字母数字和所有。它似乎对我有用。试试看。

于 2013-01-09T05:59:17.277 回答