Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 允许订阅服务器列表注册,但阻止脚本_Javascript_Security_Ddos_Subscriptions - Fatal编程技术网

Javascript 允许订阅服务器列表注册,但阻止脚本

Javascript 允许订阅服务器列表注册,但阻止脚本,javascript,security,ddos,subscriptions,Javascript,Security,Ddos,Subscriptions,我的网站上的用户有一个公开可见的个人资料,他们通过一个简单的HTML表单接受订阅。这些订阅将合并到此用户的电子邮件列表中 有人可以编写一个脚本,不断注册电子邮件,以破坏/淹没用户列表。这可以通过使用基于IP的速率限制来缓解,但如果脚本在分布式环境中运行,则此解决方案不起作用 我能想到的唯一策略是使用验证码,但我真的希望避免这样做。我还能试什么?你的问题基本上可以归结为“不使用验证码,我如何区分人和计算机?” 这确实是一个相当复杂的问题,有许多不同的答案和方法。在下面,我将尝试列举一些。其中一些想

我的网站上的用户有一个公开可见的个人资料,他们通过一个简单的HTML表单接受订阅。这些订阅将合并到此用户的电子邮件列表中

有人可以编写一个脚本,不断注册电子邮件,以破坏/淹没用户列表。这可以通过使用基于IP的速率限制来缓解,但如果脚本在分布式环境中运行,则此解决方案不起作用


我能想到的唯一策略是使用验证码,但我真的希望避免这样做。我还能试什么?

你的问题基本上可以归结为“不使用验证码,我如何区分人和计算机?”

这确实是一个相当复杂的问题,有许多不同的答案和方法。在下面,我将尝试列举一些。其中一些想法是从中吸取的

我个人认为某种验证码将是一个完美的解决方案。这并不重要 必须是图像中的扭曲文本,您也可以使用逻辑拼图或简单 计算。但通过以下方法,您可以尝试避免验证码;请记住,这些方法总是比需要用户交互的验证码更容易绕过

  • 在表单中使用隐藏字段作为蜜罐(或者
    type=hidden
    或者使用CSS)。如果此字段已填写(或具有超出预期的其他值),则表示您已检测到一个机器人(垃圾邮件机器人通常不执行语义分析,因此会填写找到的所有内容)。但是,如果bot专门针对您,或者只是了解字段名称并避开它,那么这将无法正常工作

  • 使用JavaScript检查表单提交的速度。当然,人类需要一些时间(至少几秒钟)来填写表格,而机器人则要快得多。 您还应该检查表单是否在短时间内提交了多次。如果使用AJAX表单和/或服务器端,可以通过JavaScript实现。 缺点是(正如您所提到的),它在分布式系统中不起作用

  • 使用JavaScript检测焦点事件、点击或其他鼠标事件,这些事件表明您正在与人打交道。中描述了此方法(包括一些源代码示例)

  • 检查用户是否使用标准的web浏览器;垃圾邮件发送者有时使用自编程序。您可以检查用户代理字符串,但这很容易操作。特征检测将是另一种可能性

  • 当然,如果用户禁用了JavaScript,方法2-4将不起作用。例如,在这种情况下,您可以在
    标记中显示常规验证码。在任何情况下,您都应该结合多种方法来获得有效且用户友好的测试


    我最后想到的(在您的具体案例中)是检查输入的电子邮件地址的有效性(不仅从语法上,而且还检查地址是否确实存在)。这可以通过几种方式实现(见下图)——但没有一种方式是真正可靠的。因此,同样,为了可靠地区分人类和机器人,你必须结合不同的方法。

    假设开始向你的网站发送垃圾邮件的人专门针对你的网站(不是一个随机的垃圾邮件机器人),并会积极尝试解决所有的对策,那么唯一的选择就是某种验证码,因为其他任何事情都可以自动避免

    所有防止虚假/垃圾邮件提交的非验证码方法都可以利用脚本中的缺陷进行自动提交或分析提交的内容。对于提交的类型,内容分析在这里实际上不是一个选项。因此,剩下的是各种各样的自动提交预防措施,用于打击垃圾邮件评论:

    • 基于CSS的解决方案(例如此解决方案:)
    • 基于JS的解决方案:隐藏字段由javascript计算的数据填充-如果内容是由不支持java脚本的简单垃圾邮件脚本提交的,则很容易检测到
    如果攻击者知道它们在那里,就有可能解决这两个问题——例如,当您的网站是选定的而不是随机的目标时


    总而言之:有很多解决方案可以非常成功地阻止垃圾邮件的随机提交,但如果有人专门针对你的网站,唯一真正有效的方法就是电脑不擅长验证码。

    我不太明白你的问题是什么,有太多的用户订阅了列表还是什么?在通过简单的html表单发出订阅请求后,让用户接受订阅请求怎么样?然后,对于用户,您可以按其ip对订阅请求进行分组,以不同的方式显示它们。这样用户就可以知道它们是否是假的。这是一种方法。@OlegV.Volkov问题是有一个恶意脚本将10万封虚假电子邮件订阅到一个列表中,导致该列表变得无用。@goldenparrot不幸的是,这并不能解决问题,因为用户必须手动对潜在的数千封订阅进行排序,以查看哪些是真实/虚假的。