【发布时间】:2010-08-04 09:54:55
【问题描述】:
好的,假设我们有一个允许人们发布他们的 cmets 的表单。如您所知,“坏人”可以在 PHP Curl 的帮助下轻松地向我发送垃圾邮件。如何保护我的网站免受不包括验证码的影响?谢谢。
【问题讨论】:
标签: php post curl protection
好的,假设我们有一个允许人们发布他们的 cmets 的表单。如您所知,“坏人”可以在 PHP Curl 的帮助下轻松地向我发送垃圾邮件。如何保护我的网站免受不包括验证码的影响?谢谢。
【问题讨论】:
标签: php post curl protection
如果您的意思是“我如何保护我的网站不被浏览器以外的程序访问”,答案几乎是“您不能”。浏览器只是一个发送 HTTP 请求的程序。您可以尝试拒绝看起来不是来自浏览器的 HTTP 请求,但是任意程序(使用 curl 或 Perl/Python/Ruby 库的程序)很容易模仿“真正的”浏览器发送。
【讨论】:
通常起作用的是生成一个随机值并将其存储在用户的会话中。 当我输出表单时,我将此值添加为隐藏输入。
发布表单时,将发布的值与会话中的值进行比较。每个值只使用一次(所以在输出表单之前更改它)。
这些垃圾邮件机器人通常不存储 cookie,这意味着在执行发布时,您没有当前会话 -> 没有可比较的值,因此您知道发生了一些事情。如果他们碰巧存储了 cookie,他们会遇到每个帖子都更改的表单,并且只有第一次提交会成功。如果他们每次都重新加载页面并解析表单,则此方法不起作用。但我认为没有办法防止这种情况发生。
这自然意味着您需要为网站上的每个访问者分配会话,这也意味着存储 cookie。要么是那个,要么是验证码,我不知道其他方式。
【讨论】:
最简单的方法是使用某种形式的验证码保护 (reCaptcha) 或让用户在发布 cmets 之前登录(这实际上并不能防止垃圾邮件发送,但通过阻止垃圾邮件发送者更容易采取行动他们的帐户)。
除此之外,您还可以采取一些简单的预防措施,即。限制他们在特定时间范围内可以执行的 cmets 数量 - 并且可能仅在超过此限制时才显示验证码以确定他们是人类(就像这里一样)。
【讨论】:
好吧,您可以尝试在包含有效 sessionid 的表单上设置隐藏控件。此 sessionid 将在 POST 上得到验证,并且只有成功后,该帖子才有效。
这可以使用/不使用javascript。 吉姆
【讨论】: