ReCaptcha在Android WebView中经常显示



我已经构建了一个Android应用程序,它是一个简单的WebView应用程序。该应用程序的目的是简单地显示example.com,并允许用户与网站进行交互。第一次打开应用程序后,用户将被带到example.com/login。此页面受谷歌的隐形reCaptcha保护。

我的问题是,reCaptcha大约有70%的时间显示挑战(例如,点击店面、汽车等(。对于我的用户来说,这是一次令人无法接受的令人沮丧的第一次使用该应用程序。

我认为安卓WebView的某些东西对谷歌来说一定特别可疑,从而导致了额外的验证。但是,我如何才能在不那么让真人讨厌的同时,保持我的表单的安全性,防止暴力攻击呢?以下是我想到的一些选项:

  1. 在Android上实现reCaptcha并从我的登录表单中删除reCaptcha。也就是说,只有当用户成功通过适用于Android的reCaptcha时,才会显示该登录表单。但这对我来说仍然很危险,因为一些机器人可能会"从漏洞中溜走"。然后,他们可以利用我的登录表单进行暴力攻击。此外,我的登录表单也被常规/桌面访问者使用,因此需要某种表单级别的保护
  2. 使用几个reCaptcha竞争对手之一我对此持怀疑态度,因为他们的算法可能仍然会对安卓访客进行类似的审查
  3. 在显示reCaptcha之前,使用PHP在登录表单中构建一个初始安全层。以下是我的想法:我可以创建一个名为failed_attempts.的mySQL表。当登录尝试失败时,将创建一个包含当前日期/时间和该用户的I.P.地址的记录。如果在过去30分钟内,给定IP地址的登录尝试失败次数超过3次,则要求用户使用受reCaptcha保护的登录表单进行其他登录尝试
  4. 选项#3的变体,除了通过浏览器cookie而不是IP地址跟踪用户的失败尝试。我读到过暴力攻击可能利用多个IP地址,因此依赖IP地址可能不安全。再说一遍,cookie可以很容易地被清除或禁用,所以我对这种方法更加怀疑

前进的最佳方式是什么?我更愿意首先为用户显示一个未受保护的登录表单,如果多次尝试失败,则返回reCaptcha。如果这不能可靠或安全地完成,我感兴趣的是一种同样安全但不那么烦人的reCaptcha形式,它部署在我基于网络的登录表单中或安卓系统中。

编辑:由于我的网站的随意性,通过安全问题或五位数短信代码进行传统的双因素身份验证对用户来说是过度的,同样令人沮丧。

经过进一步研究,我认为最好的解决方案是,如果站点在整个站点范围内(无论IP(经历了X次失败的登录尝试,则在我的表单上强制重述。例如,如果在过去5分钟内发生了30次失败的登录尝试,则将强制所有用户重新登录。这里有一个有用的主题描述了如何在PHP中实现:如何在PHP 中限制用户登录尝试

使用2FA而不是reCAPTCHA,以便为登录表单提供一些意义。

因为机器人不使用安卓应用程序,他们使用网络表单。

最新更新