V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
euzen
V2EX  ›  问与答

做一个简单的单点登录,遇到其中一个系统使用了动态加密,怎样解决?

  •  
  •   euzen · 2018-05-02 23:54:09 +08:00 · 2252 次点击
    这是一个创建于 2401 天前的主题,其中的信息可能已经有所发展或是发生改变。
    这个系统的密码使用了 RSA 加密,公钥写在登录页里,每刷新一次公钥就更换一次,然后再配合 cookie 和 session 检查。
    现在的思路是客户端浏览器用 javascript 取得网页内容,计算出加密的密码串后 post 到远程系统完成登录 ,但卡在 javascript 跨域的问题上,无法取得这个公钥。搜索了几天,看到的解决方案都是要服务器那边配合,这在本项目是不可能的,那是上级部门的系统。
    请问各位,有什么好的解决方法。
    18 条回复    2018-05-09 01:29:01 +08:00
    yu099
        1
    yu099  
       2018-05-03 00:01:47 +08:00 via Android
    这个安全做的不错啊。很难
    msg7086
        2
    msg7086  
       2018-05-03 00:03:09 +08:00
    你要是做成了,他们就有大麻烦了,做系统的人怕不是要赔死。
    euzen
        3
    euzen  
    OP
       2018-05-03 00:07:56 +08:00
    @msg7086 就是让客户端的人完成自动登录 ,对做系统的人有什么影响呢?
    msg7086
        4
    msg7086  
       2018-05-03 00:10:49 +08:00
    @euzen
    你试着把自己当成是一个黑客,现在要做一个劫持密码登录的系统,然后你想想和你做的单点登录有什么异同。
    euzen
        5
    euzen  
    OP
       2018-05-03 00:19:29 +08:00
    @msg7086 嗯,你说得有道理。
    只从技术上考虑,这有什么办法“破解”?
    msg7086
        6
    msg7086  
       2018-05-03 00:25:16 +08:00
    @euzen
    如果「破解」成功了,要么是做系统的人有大麻烦了,要么是浏览器厂商有大麻烦了。毕竟是个惊天大漏洞。
    你想想,要是第三方网站可以读取你网上银行登录界面数据,还能帮你登录网银,还能在上面读取数据发给第三方网站,你说是不是全球金融行业都要恐慌了。

    要跨过浏览器保护的坎,你可以做成浏览器插件,给自己赋予读写某个网站所有数据的权限,然后让你们的员工都装上,特别是弹出「允许 XX 插件读写 XX 网站的所有数据」权限要求的时候,点击允许按钮。
    然后就可以为所欲为了。
    eslizn
        7
    eslizn  
       2018-05-03 00:30:03 +08:00
    代理
    euzen
        8
    euzen  
    OP
       2018-05-03 00:47:59 +08:00
    @msg7086 是已经放弃 JS 读取内容这个想法了,因为知道跨域的问题是无法解决的。“破解”问的是有没有其他的出路。你说的插件的确是一个办法,但安装插件维护麻烦成本太高。更改 IE 设置允许跨域更简单,但这不是从“技术”层面上解决。提这个问题是希望得到本人知识面以外的一点指点,借此开阔眼界。
    euzen
        9
    euzen  
    OP
       2018-05-03 00:48:47 +08:00
    @eslizn 可以多说两句吗?
    momocraft
        10
    momocraft  
       2018-05-03 00:57:05 +08:00   ❤️ 2
    > js 學習者的三大終極問題之一: 怎樣 (違反瀏覽器的安全策略並) 實現跨域請求
    msg7086
        11
    msg7086  
       2018-05-03 00:57:21 +08:00
    他说的反向代理,但是和要求有出入。

    禁止第三方读取是原系统的要求,想要绕过必然要走一些歪路。
    正道当然是类似 CORS 这样,直接和原系统 API 交互。
    没有正道可走的话,就得走成本高昂的歪路了。

    我觉得吧,不管哪条歪路,成本高昂是跑不掉了。
    eslizn
        12
    eslizn  
       2018-05-03 01:16:54 +08:00
    @euzen 就是把这个过程放在你自己的服务器上做 所有的用户都是通过你的服务器去访问上游服务器,这样应该是能满足你的需求的
    euzen
        13
    euzen  
    OP
       2018-05-03 07:56:45 +08:00 via iPhone
    @eslizn 那就是登录之后的操作也要经代理服务器,这不太现实。
    euzen
        14
    euzen  
    OP
       2018-05-03 08:08:54 +08:00 via iPhone
    @msg7086 只要用户那里无需做特别设置,付出一定代价还是可以接受的,但了解越多,对这个系统的接入越没信心了。
    一开在自己服务后台通过 PHP curl 在对方服务上获取用户信息这个轻易搞定,以为整个任务难度不大,结果卡在浏览器安全策略上。也算长知识了。
    euzen
        15
    euzen  
    OP
       2018-05-03 08:58:29 +08:00 via iPhone
    @msg7086 说到插件,flash 能不能解决跨域的问题?
    msg7086
        16
    msg7086  
       2018-05-04 00:35:15 +08:00
    @euzen Flash 跨域也需要配置文件。

    我说过了,如果什么配置都不用,也不用像装插件那样审核+确认,就可以直接跨域读写,那就是全球性的安全危机了。你的方案如果能读写你们的内部系统,岂不是也能读写网银的页面了。
    zhaishunqi
        17
    zhaishunqi  
       2018-05-08 17:11:32 +08:00
    @msg7086
    确实如你所说,没接触过这部分,但是现在想想之前公司的单点登录系统,确实是需要安装一个认证软件才能用.
    msg7086
        18
    msg7086  
       2018-05-09 01:29:01 +08:00
    @zhaishunqi 单点登录是需要被登录的服务器配合开白名单的,CORS 或者 Crossdomain.xml 。
    直接跨域读写是不行的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1080 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:31 · PVG 06:31 · LAX 14:31 · JFK 17:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.