我们的联系表格中的垃圾邮件问题(Codeigniter)

Zab*_*abs 0 codeigniter spam

任何人都可以建议在表格上对付垃圾邮件的最佳方法 - 我们已经有了验证码,但垃圾邮件似乎仍然存在.

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

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

任何人都可以为Codeigniter(v2)建议任何其他良好的反垃圾邮件方法,这些方法不会对用户造成太大影响.提前致谢.

Lau*_*nce 8

任何人都可以建议在表格上对付垃圾邮件的最佳方法 - 我们已经有了验证码,但垃圾邮件似乎仍然存在.

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

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

是的 - 它名为CSRF - Codeigniter内置它.在配置文件中打开它,并在表单上使用form_open().而已

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

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

另一种选择是记录表单何时被"提供"给用户,如果是请求后X秒也会失败(即正常人需要30秒才能填写表单 - 所以2秒表示机器人).

使用上面的ps意味着你将能够删除Captcha :)


Rep*_*pox 7

好吧,我实际上通过一个非常简单的解决方案获得了很多成功.

创建一个CSS类:

.magic /* Call it whatever you want
{
  display: none;
}
Run Code Online (Sandbox Code Playgroud)

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

<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>
Run Code Online (Sandbox Code Playgroud)

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

...
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.

}
Run Code Online (Sandbox Code Playgroud)

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