猿问

如何检查字符串是否可能由机器人生成?

我有垃圾邮件问题。一些机器人(我相信)正在绕过 Google recaptcha 并将如下所示的字符串插入到我网站上的表单中:


dtbNPRpfcz


VvAJEXqueSKscY


有谁知道我可以使用的任何 JS 或 C# 代码很可能表明上述字符串是随机生成的?


如果我可以检查正在填写的字段并知道其中几个可能是机器人生成的,那么我可以阻止提交。


例如,上面的字符串似乎有超过正常数量的 ucase 字符。


更新: 目前正在考虑对某些字符串使用密码强度检查器。如果字符串高于弱,那么它很可能是垃圾邮件。我的网络主机说“尝试另一个recaptcha”。


更新:


好。我在这方面学到了很多东西,并获得了一些有用的代码,因此非常感谢您的输入和回答。然而,在周末忽略了这个问题后,我又看了一遍。我注意到垃圾邮件机器人绕过所有表单验证。然后一分钱掉了。该机器人将直接路由并发布到它。我还没有设置 CSRF(跨站点请求伪造)。这意味着代理可以从站点域外的 url 发布信息。呸!


我已将此添加到表单中:


 @Html.AntiForgeryToken()

但是我的一些路线缺少检查它的代码:


  try

            {

                this.ValidateCsrfToken();

            }

            catch (CsrfValidationException)

            {

                return Response.AsText("Csrf Token not 

valid.").WithStatusCode(403);

            }

所以。很抱歉浪费您的时间。那立即修复了它。


子衿沉夜
浏览 167回答 2
2回答

慕的地6264312

随机字符串检测比较复杂,与机器学习有关。我不建议您自己实现它,也许拼写检查 JS/C# 库会有所帮助。除此之外,关于机器人预防,我尝试提出一些建议:确保您已正确实施 Google recaptcha。如果可能,请使用 reCAPTCHA v3,并确保您已在后端验证 g-recaptcha-response。Google recaptcha 并非 100% 可靠,可以被一些 Anti Captcha 解决方案绕过,但正确的实现是基本的。过滤掉可疑的 IP 地址。阻止发送随机生成的字符串的 IP 地址。

繁花如伊

带有 .js 扩展名的随机 16-40 个随机字符名称脚本,您可以在其中查看以下格式的信息,如 userAgentKey、timezoneKey、browserKey。您可以使用 XHR 和 JS 信息在 Sources 选项卡或 Network 选项卡中检查脚本。您可以创建正则表达式来获取将匹配文件信息的所需脚本信息。[A-Za-z0-9]{14,40}.js 例如:ytpbsalvddssjopc.jsinterrogate: function(e) {                var t = {};                t = this.userAgentKey(t),                t = this.languageKey(t),                t = this.screenKey(t),                t = this.timezoneKey(t),                t = this.indexedDbKey(t),                t = this.addBehaviorKey(t),                t = this.openDatabaseKey(t),                t = this.cpuClassKey(t),                t = this.platformKey(t),                t = this.doNotTrackKey(t),                t = this.pluginsKey(t),                t = this.canvasKey(t),                t = this.webglKey(t),                t = this.touchSupportKey(t),                t = this.videoKey(t),                t = this.audioKey(t),                t = this.vendorKey(t),                t = this.productKey(t),                t = this.productSubKey(t),                t = this.browserKey(t),                t = this.windowKey(t),                t = this.locationKey(t),                t.fonts = "",                t.devices = null,                this.keys = t,                this.parallel([this.fontsKey, this.devicesKey], e)
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答