遇到一个奇葩的 js 验证,求破解

2016-10-07 22:35:39 +08:00
 hanmeimei

最近学习 js 来填写表单。遇到一个奇怪的表单,我如果是人工输入邮箱账号,或者粘贴,都是可以通过验证。如果是通过代码填写邮箱,都显示不通过。请问这个编码是如何写验证的?如果通过 js 填表,如何绕过验证?求大神,指导。

3828 次点击
所在节点    JavaScript
19 条回复
finalspeed
2016-10-07 22:39:23 +08:00
可能 你看到的只是显示,还有另一个标签正真做验证
ZhaoMiing
2016-10-07 22:41:24 +08:00
目测数据层没有同步,手动触发一下 change 事件?
ykrl089
2016-10-07 22:41:32 +08:00
键盘输入比对,这是我想到最简单的办法
helloccav
2016-10-07 23:01:27 +08:00
目测是 js 绑定事件的问题,通过代码输入的话无法触发相应的验证事件。
Kokororin
2016-10-07 23:09:37 +08:00
if ("createEvent" in document) {
var evt = document.createEvent("HTMLEvents");
evt.initEvent("change", false, true);
element.dispatchEvent(evt);
}
else
element.fireEvent("onchange");
hanmeimei
2016-10-07 23:14:23 +08:00
@helloccav 那么如何通过代码自动设置让其看起来像触发一样。
hanmeimei
2016-10-07 23:19:43 +08:00
@ZhaoMiing 手动点击不行,需要随便按下键盘字母。就可以了,复制粘贴。或者邮件粘贴也是可以的。
hanmeimei
2016-10-07 23:20:45 +08:00
@Kokororin 感谢,这个代码。明天电脑试一试。。有办法移除检测触发的代码不?
Kokororin
2016-10-07 23:22:48 +08:00
@hanmeimei 分析下他的提交代码,然后自己写个提交吧
ZhaoMiing
2016-10-07 23:27:19 +08:00
@hanmeimei 「手动触发」的意思是 .val('abc').trigger('change'),不是点击
hanmeimei
2016-10-07 23:34:16 +08:00
@ZhaoMiing 试过,不是。上面有网址,有时间可以测试一下。
ZhaoMiing
2016-10-08 00:31:36 +08:00
@hanmeimei 看了一下页面用了 react ,更改 input 的 value 时数据没有同步到对应的组件 state 里去。由于没有 jQuery 只能这样触发 change 事件了。
var event = new Event('input', { bubbles: true });
document.querySelector('#newEmail').dispatchEvent(event);
jprovim
2016-10-08 05:42:00 +08:00
静观大牛的各种解法.
mathcoder23
2016-10-08 08:34:19 +08:00
直接新建一个提交方便吗?
indooorsman
2016-10-08 09:34:25 +08:00
keyup keydown input 这些事件挨个触发一遍😄
Kokororin
2016-10-08 10:06:41 +08:00
测试可行,能够收到邮件,但是后端还是有做邮件地址的验证
var getCookie = function(name) {
var value = "; " + document.cookie;
var parts = value.split("; " + name + "=");
if (parts.length == 2) return parts.pop().split(";").shift();
}
fetch('https://app.meiqia.com/api/agent/agents/' + getCookie('_agent_id') + '?v=' + new Date().getTime(), {
method: 'put',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
Authorization: getCookie('_authenticated')
},
body: JSON.stringify({
email: 'xxx@xxx.com'
})
})
.then(function(response) {
return response.json()
})
.then(function(json) {
console.log(json)
})
hanmeimei
2016-10-08 14:56:16 +08:00
@Kokororin 牛叉。可以使用。但是这个是如何知道表单是这样子触发的呢?
hanmeimei
2016-10-08 15:00:17 +08:00
@ZhaoMiing 亲测可用。感谢。这个 even 是怎么抓取到的呢?我找不到
Kokororin
2016-10-08 16:22:58 +08:00
@hanmeimei 点提交的时候在 network 里可以看到

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/311028

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX