V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
hanmeimei
V2EX  ›  JavaScript

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

  •  
  •   hanmeimei · 2016-10-07 22:35:39 +08:00 · 3815 次点击
    这是一个创建于 2976 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    第 1 条附言  ·  2016-10-07 23:26:40 +08:00
    这个地方在这里: https://app.meiqia.com/setting/profile 需要先登入账号,然后转到上面这个链接。有个修改邮箱的地方。这个何解?
    19 条回复    2016-10-08 16:22:58 +08:00
    finalspeed
        1
    finalspeed  
       2016-10-07 22:39:23 +08:00 via Android
    可能 你看到的只是显示,还有另一个标签正真做验证
    ZhaoMiing
        2
    ZhaoMiing  
       2016-10-07 22:41:24 +08:00
    目测数据层没有同步,手动触发一下 change 事件?
    ykrl089
        3
    ykrl089  
       2016-10-07 22:41:32 +08:00
    键盘输入比对,这是我想到最简单的办法
    helloccav
        4
    helloccav  
       2016-10-07 23:01:27 +08:00
    目测是 js 绑定事件的问题,通过代码输入的话无法触发相应的验证事件。
    Kokororin
        5
    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
        6
    hanmeimei  
    OP
       2016-10-07 23:14:23 +08:00
    @helloccav 那么如何通过代码自动设置让其看起来像触发一样。
    hanmeimei
        7
    hanmeimei  
    OP
       2016-10-07 23:19:43 +08:00
    @ZhaoMiing 手动点击不行,需要随便按下键盘字母。就可以了,复制粘贴。或者邮件粘贴也是可以的。
    hanmeimei
        8
    hanmeimei  
    OP
       2016-10-07 23:20:45 +08:00
    @Kokororin 感谢,这个代码。明天电脑试一试。。有办法移除检测触发的代码不?
    Kokororin
        9
    Kokororin  
       2016-10-07 23:22:48 +08:00
    @hanmeimei 分析下他的提交代码,然后自己写个提交吧
    ZhaoMiing
        10
    ZhaoMiing  
       2016-10-07 23:27:19 +08:00
    @hanmeimei 「手动触发」的意思是 .val('abc').trigger('change'),不是点击
    hanmeimei
        11
    hanmeimei  
    OP
       2016-10-07 23:34:16 +08:00
    @ZhaoMiing 试过,不是。上面有网址,有时间可以测试一下。
    ZhaoMiing
        12
    ZhaoMiing  
       2016-10-08 00:31:36 +08:00   ❤️ 1
    @hanmeimei 看了一下页面用了 react ,更改 input 的 value 时数据没有同步到对应的组件 state 里去。由于没有 jQuery 只能这样触发 change 事件了。
    var event = new Event('input', { bubbles: true });
    document.querySelector('#newEmail').dispatchEvent(event);
    jprovim
        13
    jprovim  
       2016-10-08 05:42:00 +08:00
    静观大牛的各种解法.
    mathcoder23
        14
    mathcoder23  
       2016-10-08 08:34:19 +08:00
    直接新建一个提交方便吗?
    indooorsman
        15
    indooorsman  
       2016-10-08 09:34:25 +08:00 via Android
    keyup keydown input 这些事件挨个触发一遍😄
    Kokororin
        16
    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: '[email protected]'
    })
    })
    .then(function(response) {
    return response.json()
    })
    .then(function(json) {
    console.log(json)
    })
    hanmeimei
        17
    hanmeimei  
    OP
       2016-10-08 14:56:16 +08:00
    @Kokororin 牛叉。可以使用。但是这个是如何知道表单是这样子触发的呢?
    hanmeimei
        18
    hanmeimei  
    OP
       2016-10-08 15:00:17 +08:00
    @ZhaoMiing 亲测可用。感谢。这个 even 是怎么抓取到的呢?我找不到
    Kokororin
        19
    Kokororin  
       2016-10-08 16:22:58 +08:00 via iPhone   ❤️ 1
    @hanmeimei 点提交的时候在 network 里可以看到
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1024 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:14 · PVG 03:14 · LAX 11:14 · JFK 14:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.