我们的联系方式中存在垃圾邮件问题(Codeigniter)

我们的联系方式中存在垃圾邮件问题(Codeigniter),codeigniter,spam,Codeigniter,Spam,有谁能建议最好的方法来对付表单上的垃圾邮件吗?我们已经有了验证码,但垃圾邮件似乎仍在流行 是否可以执行以下操作。。。 在表单上检查POST请求是否来自该站点提交的表单,而不是使用相同操作的表单。如果请求来自站点,请接受,否则不要忽略请求 此外,是否有可能在服务器端采取措施阻止DDOS式攻击,因为我们网站的垃圾邮件发送者似乎在很短的时间内发送了数千个请求 有没有人能为Codeigniter v2推荐其他不会对用户造成太多阻碍的好的反垃圾邮件方法。提前谢谢 有谁能建议最好的方法来对付表单上的垃圾邮件

有谁能建议最好的方法来对付表单上的垃圾邮件吗?我们已经有了验证码,但垃圾邮件似乎仍在流行

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

此外,是否有可能在服务器端采取措施阻止DDOS式攻击,因为我们网站的垃圾邮件发送者似乎在很短的时间内发送了数千个请求

有没有人能为Codeigniter v2推荐其他不会对用户造成太多阻碍的好的反垃圾邮件方法。提前谢谢

有谁能建议最好的方法来对付表单上的垃圾邮件吗?我们已经有了验证码,但垃圾邮件似乎仍在流行

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

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

是的,它被称为CSRF-Codeigniter,内置了它。在配置文件中打开它,并在表单上使用form_open。就这样

此外,是否有可能在服务器端采取措施阻止DDOS式攻击,因为我们网站的垃圾邮件发送者似乎在很短的时间内发送了数千个请求

是-在会话中为每个用户添加最后提交字段。或者IP。或者你想如何追踪垃圾邮件发送者。在每次提交表单时,检查上次提交时间,如果时间小于X秒,其中X是您认为合适的数字(表示5秒),则由于表单提交次数过多,导致表单失败

另一个选项是记录表单何时送达用户,如果是在请求后X秒,也会失败,即正常人需要30秒来填写表单-因此2秒意味着机器人


p、 使用上述方法,您将能够删除验证码:

事实上,我已经用一个非常简单的解决方案取得了很多成功

创建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>

你的用户永远也看不到这一点——这让我几年来一直没有收到垃圾邮件。简单但有效。

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

Repos发布了一个我提到的蜜罐技术的很好的具体例子edi不会这么做,如果用户有一些网络浏览器的糟糕的自动填写表单怎么办?即使没有显示,浏览器也会自动为他填写。
...
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.

}