gpt4 book ai didi

php - 检测没有验证码或用户代理的用户是否为人类

转载 作者:行者123 更新时间:2023-12-04 04:53:52 26 4
gpt4 key购买 nike

我有一个网站,向用户提供电子邮件加密,并且试图找出是否存在一种方法来检测(如果用户是人还是机器人)。
我一直在研究php中的 $ _SESSION ,但是很容易绕开,我对验证码用户代理登录解决方案也不感兴趣,是否需要我提供任何帮助?

在SO中还有其他与此问题非常相似的问题,但是我找不到直接的答案...

任何帮助将非常欢迎,谢谢大家!

最佳答案

从机器人防御和可用性的角度来看,这是一个棘手的问题,而且我所知道的解决方案都不是100%完美的。如果您的攻击者确实确定要在您的网站上使用漫游器,那么他们可能将能够使用。如果您采取的措施足以使计算机程序无法访问您站点上的任何内容,那么很可能没人会愿意,但是您可以找到一个很好的平衡。

我的观点部分是作为Web开发人员,但从另一方面讲,我为世界各地的客户编写了许多Web爬虫程序。并非所有的bot都有恶意的意图,并且可以用于从自动提交表单到填充医生办公地址的数据库或分析股票市场数据的事情。如果从可用性的角度出发精心设计您的网站,则无需为用户“使事情变得简单”的机器人,但在某些情况下您无法计划特殊需求。

当然,有些人确实怀有恶意,您绝对希望尽可能地保护自己的网站。几乎没有网站无法通过某种方式实现自动化。大多数站点一点都不困难,但是,从此页面上的其他答案或评论,以及我编写(非恶意)机器人的经验中,我总能想到一些想法。

机器人的类型

首先我要提到的是,我会将机器人分为两个不同的类别:

  • 通用搜寻器,索引器或漫游器
  • 专用机器人,专门为您的网站执行

  • 通常,通用漫游器将成为诸如搜索引擎的索引器之类的东西,或者可能是某些黑客的脚本,该脚本寻找要提交的表单,使用字典攻击来搜索易受攻击的URL,或类似的东西。他们还可以攻击“引擎站点”,例如Wordpress博客。如果您的网站已使用好密码等正确保护,通常不会给您带来太大的风险(除非您确实使用Wordpress,否则您必须紧跟最新版本和安全更新) 。

    特殊目的的“个性化”机器人是我所写的那种。可以使专门为您的网站制作的机器人的行为与您的网站的人类用户非常相似,包括在表单提交之间插入时间延迟,设置cookie等,因此很难检测到它们。在大多数情况下,这就是我在其余答案中所谈论的那种。

    验证码

    验证码可能是确保用户是类人动物的最常用方法,通常很难自动绕过。但是,例如,如果您仅在用户创建帐户时要求一次性输入验证码,那么人类很容易越过该帐户,然后将其 Shiny 的新帐户凭据提供给机器人以自动使用系统。

    我记得几年前读过一个非常精致的系统,用于“自动化”流行游戏网站上的验证码:建立了一个单独的网站,从游戏网站上加载验证码,并将其呈现给用户,实际上,这些用户很拥挤,来源。第二个站点上的用户将为每个正确的验证码获得某种奖励,并且该站点的所有者能够使用其众包验证码数据在游戏站点上自动执行任务。

    通常,使用良好的验证码系统可以很好地保证一件事:某处有人输入验证码文本。在此之前和之后发生的事情取决于您需要多长时间验证一次验证码,以及确定机器人的人是如何确定的。

    手机/信用卡验证

    如果您不想使用Captchas,则这种类型的验证对于除最坚定的机器人编写程序之外的所有程序都可能非常有效。虽然(与验证码一样)不会阻止已经验证的用户创建和使用漫游器,但是您可以验证是否有人创建了该帐户,如果滥用该权限,则该电话号码/信用卡会被阻止使用创建另一个帐户。

    诸如Facebook和Craigslist之类的网站已开始使用手机验证功能,以防止来自僵尸程序的垃圾邮件。例如,要在Facebook上创建应用,您必须记录电话号码,并通过短信或自动电话确认。除非您的攻击者可以访问大量有效的电话号码,否则这可能是一种有效的方法,可以验证一个人是否创建了该帐户并且他仅创建了数量有限的帐户(大多数人可以使用一个)。

    信用卡还可以用于确认某人正在执行某项操作并限制一个人可以创建的帐户数量。

    其他[效果欠佳]的解决方案

    日志分析

    分析您的请求日志通常会发现机器人重复执行相同的操作,或者有时会使用字典攻击来查找站点配置中的漏洞。因此,日志会在事后告诉您是机器人还是人工提出请求。这可能对您有用,也可能没有用,但是如果请求是通过手机或信用卡验证的帐户发出的,则可以锁定与违规请求关联的帐户,以防止进一步滥用。

    数学/其他问题

    数学问题或其他问题可以通过快速 googlewolfram alpha搜索来回答,这些搜索可以由漫游器自动进行。有些问题会比其他问题难一些,但是大型搜索公司正在与您合作,使他们的引擎更好地理解此类问题,从而使此方法不那么可行,无法验证用户是人类。

    隐藏的表单域

    某些网站采用一种机制,将诸如单击“提交”按钮时的鼠标坐标之类的参数添加到通过javascript提交的表单中。在大多数情况下,这些伪造非常容易伪造,但是如果您在日志中看到使用相同坐标的一堆请求,则很可能是机器人(尽管智能机器人可以轻松地为每个请求提供不同的坐标)。

    Javascript Cookie

    由于大多数机器人都不会加载或执行javascript,因此使用javascript而不是 set-cookie HTTP header 设置的cookie将使大多数可能成为机器人的制造商的生活变得有些困难。但是,一旦开发人员弄清楚如何生成javascript生成的相同值,就可以防止机器人也手动设置cookie了。

    IP地址

    一个IP地址并不能告诉您用户是否是人类。但是,某些站点使用IP地址尝试检测bot,确实,一个简单的bot可能会显示为来自同一IP的一堆请求。但是IP地址很便宜,并且通过Amazon的EC2服务或类似的云服务,您可以生成服务器并将其用作代理。或生成10或100,并将它们全部用作代理。

    UserAgent字符串

    这在爬虫中非常容易操作,以至于您无法依靠它来标记试图被检测不到的机器人。将UserAgent设置为主要浏览器之一发送的相同字符串很容易,甚至可以在几种不同的浏览器之间轮换。

    复杂的标记

    我写过的最难的网站是一个机器人,它由框架内的框架组成...每页约10层深,其中每个框架的 src是相同的基本 Controller 页面,但是对于要执行的操作具有不同的参数履行。 Action 的顺序很重要,因此很难保持所有发生的事情,但是最终(大约一周后)我的机器人工作了,因此尽管这可能会阻止某些机器人制造商,但对全部。而且可能会使您的网站难以维护约数十亿倍。

    免责声明

    并非所有的机器人都是“坏”的。我制作的大多数爬网程序/漫游器都是为那些想要自动化站点上某些过程(例如数据输入)的用户而设计的,这些过程过于繁琐而无法手动完成。因此,使繁琐的任务变得容易!或者,为您的用户提供一个API。阻止某人为您的网站编写机器人的最简单方法之一就是提供API访问权限。如果您提供API,那么有人会为它创建搜寻器的可能性要小得多。您可以使用API​​ key 来控制某人使用它的程度。

    为了防止垃圾邮件发送者,通过手机号或信用卡验证码和帐户验证的某种组合可能将是最有效的方法。添加一些日志记录分析以识别和禁用任何恶意的个性化机器人,您的状态应该会很好。

    关于php - 检测没有验证码或用户代理的用户是否为人类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7152579/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com