2010-08-04 98 views
-1

好吧,让我们假设我们有一个允许用户发表评论的表单。如您所知,“坏人”可以轻松地在PHP Curl的帮助下发送垃圾邮件。我如何保护我的网站免受包含captcha的情况?谢谢。保护网站免受PHP Curl post方法?

回答

1

最简单的方法是使用某种形式的验证码保护(reCaptcha),或让用户登录后才能发表评论(这实际上并不能防止垃圾邮件,但可以更轻松地对付通过阻止他们的帐户发送垃圾邮件)

除此之外,你还可以采取一些简单的预防措施,即。限制他们在特定时间范围内可以执行的评论数量 - 也许只有在超过此限制时才会显示验证码,以确定它们是否为人类(如此处所述)。

+0

即使capcha不是100%安全的,请参阅http://ejohn.org/blog/ocr-and-neural-nets-in-javascript/ – Sarfraz 2010-08-04 12:06:34

+0

我知道,但[reCaptcha](http://www.recaptcha。 com)对于OCR攻击是非常安全的,甚至可以让盲人用户访问:p。 – wimvds 2010-08-04 12:24:25

4

如果您的意思是“如何保护我的网站不被浏览器以外的程序访问”,则答案几乎是“您不能”。浏览器只是一个发送HTTP请求的程序。你可以玩尝试拒绝看起来不像浏览器的HTTP请求的游戏,但对于一个任意程序(使用curl或者Perl/Python/Ruby库)来模仿头文件是非常简单的“真实”的浏览器发送。

+0

问题不在于这个,Sarfraz。 – 2010-08-04 09:57:50

+3

@hey答案在那里:“你不能”。就是这样。 – Maerlyn 2010-08-04 09:59:38

+0

@hey:***如您所知,“坏人”可以轻松地在PHP Curl的帮助下发送垃圾邮件。 – Sarfraz 2010-08-04 10:00:24

2

通常的作用是生成一个随机值并将其存储在用户的会话中。 当我输出表单时,我将这个值作为一个隐藏的输入。

当表单发布时,比较发布的值与会话中的值。每个值只能使用一次(因此在输出表单之前更改它)。

那些垃圾邮件通常不会存储cookie,这意味着当邮件被执行时,您没有当前会话 - >没有可比较的值,所以您知道发生了某些事情。如果他们确实发生了存储cookie的情况,他们会针对每个帖子的形式发生冲突,只有第一次提交才会成功。如果他们每次再次加载页面并解析表单,则此方法不起作用。但我认为没有办法来防止这种情况发生。

当然,这意味着您需要为您网站上的每位访问者分配会话,这也意味着存储Cookie。无论是那个还是一个验证码,我都不知道其他方法。

+0

会话支持和表单检查很容易集成。当然,由于他们不会那么努力地尝试(有更低的悬挂水果),所以你会得到主要的垃圾邮件,但它不会成为真正的障碍。 – Wrikken 2010-08-04 10:02:12

+0

+1滚球的一个很好的解决方案。 – 2010-08-04 10:03:07

+0

@Wrikken如果有人想要模拟一个完整的浏览器,那么现实是不现实的 - 我猜这只是提高目标帖子。 – 2010-08-04 10:04:13

1

好吧,你可以尝试一下沿着包含有效sessionid的表单上的隐藏控件的行。此sessionid将在POST上进行验证,并且只有在它成功后,该帖子才有效。

这可以使用/不使用JavaScript。 jim