V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
libasten
V2EX  ›  程序员

已知第三方网站的用户名和密码,可以通过 html+js 实现自动登录吗?

  •  
  •   libasten · 2019-08-09 16:57:53 +08:00 · 7691 次点击
    这是一个创建于 1918 天前的主题,其中的信息可能已经有所发展或是发生改变。
    已有一个成熟的 xx 管理系统。
    每次使用要打开浏览器输入这个系统的登录界面 url,http://xxx/login,然后输入用户名密码,点击“登录”然后进入系统主界面。
    需求是这样,在一个网页上挂一个超链接,指向上述系统的登录页面,这样点击这个超链接,跳转到这个 xx 管理的同时,附带已知的用户名和密码,跳过输入用户名密码的界面,自动进入系统主界面。
    也就是说要想要通过超链接,跳过输入用户名密码的过程,直接进系统。
    这些能通过 html+js 的方式实现吗?
    -----
    此前在其他网站咨询,有网友让试试基于 nodejs 的 puppeteer,我刚才跑了一下,因为我不懂前端开发,这个是不是要求机器上必须装 node 环境和 chrome ?
    能否像 html+js 那样运行在任何一台有浏览器的电脑上?
    22 条回复    2019-12-02 09:53:46 +08:00
    EridanusSora
        1
    EridanusSora  
       2019-08-09 17:14:22 +08:00 via Android
    electron
    moxiaonai
        2
    moxiaonai  
       2019-08-09 17:19:34 +08:00 via Android
    油猴脚本?
    wdv2ly
        3
    wdv2ly  
       2019-08-09 17:28:43 +08:00 via Android
    可以
    lauix
        4
    lauix  
       2019-08-09 17:34:00 +08:00
    油猴脚本
    duan602728596
        5
    duan602728596  
       2019-08-09 17:35:52 +08:00
    应该做的是系统登录后,接口返回的 cookie 里面带一个 token,进入这个系统时,先判断 cookie 内是否有 token,如果没有,就跳回登陆页。
    或者,跳转到一个中间链接,后端进行登陆,如果登陆成功,再次跳转到该管理系统。

    but,附带已知的用户名和密码是怎么一回事?
    AlphaTr
        6
    AlphaTr  
       2019-08-09 17:39:04 +08:00 via iPhone
    纯前端的话,如果对方 csrf 没防,自己写个页面提交就行;否则就得如楼上说的,油猴一类的插件解决;话说,为什么会有这样的不安全做法的需求,用户名密码自动填充不行吗
    arrow8899
        7
    arrow8899  
       2019-08-09 17:41:56 +08:00
    如果是同一个域名的话是可以的,如果域名不同肯定不行,浏览器禁止了跨域操作,可以用 nginx 做反代,在 nginx 内用 lua 脚本实现登录操作( openresty )。
    rockjike
        8
    rockjike  
       2019-08-09 17:45:39 +08:00
    浏览器存 token, 判断 token 是否有效, 有效直接跳主页, 无效在登录
    iddddg
        9
    iddddg  
       2019-08-09 18:17:44 +08:00
    来个第三方网站登陆地址看看?
    SmiteChow
        10
    SmiteChow  
       2019-08-09 19:11:03 +08:00
    puppeteer-recorder
    beastk
        11
    beastk  
       2019-08-09 19:21:40 +08:00 via iPhone
    form 表单自动提交不行吗
    vtwoextb
        12
    vtwoextb  
       2019-08-09 19:25:07 +08:00
    第一次登录保存 cookie,脚本带着 cookie 登录
    orzorzorzorz
        13
    orzorzorzorz  
       2019-08-09 19:31:52 +08:00
    iframe 传值完事
    scofieldpeng
        14
    scofieldpeng  
       2019-08-10 10:42:20 +08:00
    其实如果是你偷懒的话,完全可以用密码管理工具来解决啊,比如大家用的 1password 这些
    libasten
        15
    libasten  
    OP
       2019-08-10 10:50:39 +08:00
    @duan602728596 “附带”两个字可能不准确,我想要表达的意思就是将手边已知的用户名密码用上。
    我也是设想着做一个后端登录模块,然后成功了,跳转到该系统。但是没有思路,我一直是写后端增删改查的,稍微懂点前端内容,能给点详细的指导吗?


    @AlphaTr 确实不安全,但是是内网的办公系统之间的跳转,与互联网物理隔离了,我们领导就不想输入用户名密码,觉得烦,让我们想办法搞个“小工具”,减去输入的动作,您说的“自动填充”,能展开具体说说吗?


    @beastk 能否展开说说 form 自动提交怎么做?跨域能搞定吗?

    一并感谢大家。
    duan602728596
        16
    duan602728596  
       2019-08-10 11:20:19 +08:00 via iPhone
    @libasten 你的系统是前后端分离的么?用户凭据是存在 cookie 里的么?
    Cheez
        17
    Cheez  
       2019-08-10 17:43:04 +08:00
    没看懂你想干什么

    你能修改登录页面的话就在里面改 js,接受数据

    不能的话就修改浏览器,用油猴脚本

    不能的话就快捷键 AHK

    不能的话就洗洗睡吧
    jinliming2
        18
    jinliming2  
       2019-08-10 22:18:54 +08:00 via iPhone
    @orzorzorzorz 但如果对方设置了 X-Frame-Options: deny 或者 X-Frame-Options: sameorigin,就不能用 iframe 了
    tuboshuv1
        19
    tuboshuv1  
       2019-11-25 15:44:47 +08:00
    @libasten 大兄弟,你之前的这个问题解决了吗
    libasten
        20
    libasten  
    OP
       2019-11-25 16:01:14 +08:00
    @tuboshuv1 后来没有按照这个思路走,直接在 url 里面明文传参进入系统了。
    tuboshuv1
        21
    tuboshuv1  
       2019-11-25 18:12:49 +08:00   ❤️ 2
    @libasten 我在网上找到了相应的方法。连接是 https://www.cnblogs.com/carrollCN/p/11182195.html
    搜索关健词是:js 脚本实现在该界面直接跳转到一个登录界面并且自动登录
    关键代码是:
    function PostSubmit() {
    var postUrl = 'http://localhost:8093/nantaitou/login.shtml';//提交地址
    var postData = 'superAccount';//第一个数据,xxxxxx 里面就是你需要填写的数据
    var msgData ='superUser8080';//第二个数据同上
    var ExportForm = document.createElement("FORM");
    document.body.appendChild(ExportForm);
    ExportForm.method = "POST";
    var newElement = document.createElement("input");
    newElement.setAttribute("name", "username");
    newElement.setAttribute("type", "hidden");

    var newElement2 = document.createElement("input");
    newElement2.setAttribute("name", "password");
    newElement2.setAttribute("type", "hidden");
    ExportForm.appendChild(newElement);
    ExportForm.appendChild(newElement2);
    newElement.value = postData;
    newElement2.value = msgData;
    ExportForm.action = postUrl;
    ExportForm.submit();
    };
    libasten
        22
    libasten  
    OP
       2019-12-02 09:53:46 +08:00
    @tuboshuv1 感谢!虽然我后面没有用这个思路,但是学习到了一个新技能!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2952 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 02:49 · PVG 10:49 · LAX 18:49 · JFK 21:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.