Javascript 允许订阅服务器列表注册,但阻止脚本
我的网站上的用户有一个公开可见的个人资料,他们通过一个简单的HTML表单接受订阅。这些订阅将合并到此用户的电子邮件列表中 有人可以编写一个脚本,不断注册电子邮件,以破坏/淹没用户列表。这可以通过使用基于IP的速率限制来缓解,但如果脚本在分布式环境中运行,则此解决方案不起作用Javascript 允许订阅服务器列表注册,但阻止脚本,javascript,security,ddos,subscriptions,Javascript,Security,Ddos,Subscriptions,我的网站上的用户有一个公开可见的个人资料,他们通过一个简单的HTML表单接受订阅。这些订阅将合并到此用户的电子邮件列表中 有人可以编写一个脚本,不断注册电子邮件,以破坏/淹没用户列表。这可以通过使用基于IP的速率限制来缓解,但如果脚本在分布式环境中运行,则此解决方案不起作用 我能想到的唯一策略是使用验证码,但我真的希望避免这样做。我还能试什么?你的问题基本上可以归结为“不使用验证码,我如何区分人和计算机?” 这确实是一个相当复杂的问题,有许多不同的答案和方法。在下面,我将尝试列举一些。其中一些想
我能想到的唯一策略是使用验证码,但我真的希望避免这样做。我还能试什么?你的问题基本上可以归结为“不使用验证码,我如何区分人和计算机?” 这确实是一个相当复杂的问题,有许多不同的答案和方法。在下面,我将尝试列举一些。其中一些想法是从中吸取的 我个人认为某种验证码将是一个完美的解决方案。这并不重要 必须是图像中的扭曲文本,您也可以使用逻辑拼图或简单 计算。但通过以下方法,您可以尝试避免验证码;请记住,这些方法总是比需要用户交互的验证码更容易绕过
type=hidden
或者使用CSS)。如果此字段已填写(或具有超出预期的其他值),则表示您已检测到一个机器人(垃圾邮件机器人通常不执行语义分析,因此会填写找到的所有内容)。但是,如果bot专门针对您,或者只是了解字段名称并避开它,那么这将无法正常工作
标记中显示常规验证码。在任何情况下,您都应该结合多种方法来获得有效且用户友好的测试
我最后想到的(在您的具体案例中)是检查输入的电子邮件地址的有效性(不仅从语法上,而且还检查地址是否确实存在)。这可以通过几种方式实现(见下图)——但没有一种方式是真正可靠的。因此,同样,为了可靠地区分人类和机器人,你必须结合不同的方法。假设开始向你的网站发送垃圾邮件的人专门针对你的网站(不是一个随机的垃圾邮件机器人),并会积极尝试解决所有的对策,那么唯一的选择就是某种验证码,因为其他任何事情都可以自动避免 所有防止虚假/垃圾邮件提交的非验证码方法都可以利用脚本中的缺陷进行自动提交或分析提交的内容。对于提交的类型,内容分析在这里实际上不是一个选项。因此,剩下的是各种各样的自动提交预防措施,用于打击垃圾邮件评论:
- 基于CSS的解决方案(例如此解决方案:)
- 基于JS的解决方案:隐藏字段由javascript计算的数据填充-如果内容是由不支持java脚本的简单垃圾邮件脚本提交的,则很容易检测到
总而言之:有很多解决方案可以非常成功地阻止垃圾邮件的随机提交,但如果有人专门针对你的网站,唯一真正有效的方法就是电脑不擅长验证码。我不太明白你的问题是什么,有太多的用户订阅了列表还是什么?在通过简单的html表单发出订阅请求后,让用户接受订阅请求怎么样?然后,对于用户,您可以按其ip对订阅请求进行分组,以不同的方式显示它们。这样用户就可以知道它们是否是假的。这是一种方法。@OlegV.Volkov问题是有一个恶意脚本将10万封虚假电子邮件订阅到一个列表中,导致该列表变得无用。@goldenparrot不幸的是,这并不能解决问题,因为用户必须手动对潜在的数千封订阅进行排序,以查看哪些是真实/虚假的。