我试图弄清楚我的一些网站用户是如何绕过客户端 JavaScript 表单验证的。我有一个多步骤表单,无法在关闭 JavaScript 的情况下工作,因为它的步骤会随着您的进度而显示/隐藏,并且提交按钮通过 ajax 工作(即它没有 type="submit"
属性)。
我正在使用1000hz validator.js库来处理验证,并且经过广泛的测试,我相信它适用于表单上的所有输入。
表单上的字段之一是英国手机号码,因此应以 07 开头,长度为 11 个数字。我使用正则表达式 pattern="^07\d{9}$"
进行此检查,它工作得很好,因为除非输入格式,否则我无法继续处理表单正确。
通过查看提交的表单,我发现大约 1% 的申请中此字段输入的格式无效,例如 12 个字符长或带有特殊字符,例如前缀为国家/地区代码 (+44)
我不认为存在任何恶意行为,例如,人们尝试使用工具发布此数据,因为它看起来确实像有效流量。
这些帖子的用户代理都略有不同,但其中很多似乎来自 Android 4.4.2,即..
Mozilla/5.0 (Linux; Android 4.4.2; N830 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36
我尝试使用类似的设备复制此内容,但验证似乎工作得很好。
最佳答案
正在进行输入验证的库可能未加载。造成这种情况的原因可能有多种:
- 对库的 http 请求失败 - 最终用户可能无法访问库所在的域;
- 最终用户安装了一些第三方插件,例如广告拦截插件,该插件会阻止库运行;
- 代码中存在错误,导致库无法在特定浏览器上编译;
- 最终用户正在控制他希望运行哪些脚本;
您应该切换到服务器端验证以防止发生进一步的错误。
关于javascript - 一些用户绕过客户端验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36128836/