Php 就垃圾邮件和机器人而言,这个“给朋友小费”功能安全吗?

Php 就垃圾邮件和机器人而言,这个“给朋友小费”功能安全吗?,php,javascript,ajax,security,validation,Php,Javascript,Ajax,Security,Validation,我有一个分类广告网站 每个分类都显示在一个名为show_ad.php的php页面中 我正在开发一个提示好友功能,用户可以在其中输入自己的姓名、好友电子邮件以及发送给好友的短消息 以上是没有问题的,但是,我需要确保机器人不使用此表格的垃圾邮件等 一种方法是验证码,但我正在考虑创建我自己的验证码,所以这是我的计划,我需要你告诉我它是否有任何缺陷: 1-加载show_ad.php文件时,我生成一个随机数,比如说5位数字。 2-我将数字输出给用户,并告诉用户在表单文本输入中输入该数字。 3-数字也被放入

我有一个分类广告网站

每个分类都显示在一个名为show_ad.php的php页面中

我正在开发一个提示好友功能,用户可以在其中输入自己的姓名、好友电子邮件以及发送给好友的短消息

以上是没有问题的,但是,我需要确保机器人不使用此表格的垃圾邮件等

一种方法是验证码,但我正在考虑创建我自己的验证码,所以这是我的计划,我需要你告诉我它是否有任何缺陷:

1-加载show_ad.php文件时,我生成一个随机数,比如说5位数字。 2-我将数字输出给用户,并告诉用户在表单文本输入中输入该数字。 3-数字也被放入隐藏输入中。 4-用户按下发送按钮。 5-我使用ajax调用一个名为send_tip.php的php文件,获取隐藏输入的值,并将其与用户输入的文本输入进行比较,看看它们是否匹配,然后发送电子邮件

没有什么是足够安全的,但是对于一个分类广告网站来说,上面的这些就足够了吗

谢谢

更新:


6-我在mysql中添加了一个表,它记录发送电子邮件的用户的ip地址,如果超过每分钟3封电子邮件和每天30封电子邮件,我会停止它们。。。虽然那样的话,也许只有电子邮件就足够了,我应该用随机数跳过第一步?你觉得怎么样?

一个人可以很容易地编写一个机器人,查看隐藏字段并提交正确的数据


所以不,它不安全。

没有验证码是100%防僵尸的,但99%防僵尸就足够了。 AJAX将成为机器人的巨大障碍,这已经足够安全了。 您应该为表单字段提供误导性的名称。例如,您的号码的隐藏字段将被命名为message,所以您的bot将错误填充它。 然而,如果你的网站足够大,机器人程序员将重新编程他们的机器人来应对你的网站


另请参见:

这不是很安全。更好的解决方案是生成该5位数字并将其存储在会话中。然后生成显示数字的图像。任何需要破解此验证码的机器人都需要能够对图像进行OCR,这要复杂得多。 这种方法的另一个小小的优点是,它不需要AJAX,尽管这也可能是一个缺点,因为AJAX对机器人来说是一个额外的障碍。如果愿意,您仍然可以使用AJAX请求图像

[编辑]
编写自己的验证码的一个非常大的优点是,有人需要为它编写一个特定的机器人。普通的验证码可以被只寻找标志的普通机器人入侵。我已经成功地保护了我的一些表单,用一个简单的自定义验证码替换了复杂的验证码,它只显示纯文本,甚至总是需要相同的答案

> P>你可能想考虑使用,而不是重新发明车轮并制作自己的CAPTCHA。


作为一个很好的副作用,你正在帮助数字化书籍

我不确定你的编辑是什么,但如果它是可以编写脚本的,垃圾邮件发送者会利用它。基本上,这里的唯一防线是这个地点的默默无闻。这个特殊的保护措施几乎没有增加任何内容。好的,你的更新是关于速率限制的。如果你能找到合适的极限,这就足够了。请注意,垃圾邮件发送者可以访问许多IP。顺便说一句,这是一件好事,不管你最终是否使用了传统的图像验证码。@Camran:有了编辑,它仍然不能远程安全。只是比任何给定的个人IP都要慢一点,这些人有数百万个IP可供使用。天哪,为什么要发明你自己的验证码?我不知道它是否对机器人安全,但可能对垃圾邮件不安全,因为这很可能是你将要发送给朋友的。FWIW,如果我想让《纽约时报》知道我的电子邮件地址,我会把它给他们的。那些把我的个人电子邮件地址发送给网站的朋友和家人往往会得到我的一些强硬回应。如果你想给我发点什么,抓取网址直接发电子邮件给我。。而且这个网站总是被完全忽略。+1对于reCaptcha,很多主要网站都使用它,并且它将旧书数字化!