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

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

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

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

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

我说过了,如果什么配置都不用,也不用像装插件那样审核+确认,就可以直接跨域读写,那就是全球性的安全危机了。你的方案如果能读写你们的内部系统,岂不是也能读写网银的页面了。
zhaishunqi
2018-05-08 17:11:32 +08:00
@msg7086
确实如你所说,没接触过这部分,但是现在想想之前公司的单点登录系统,确实是需要安装一个认证软件才能用.
msg7086
2018-05-09 01:29:01 +08:00
@zhaishunqi 单点登录是需要被登录的服务器配合开白名单的,CORS 或者 Crossdomain.xml 。
直接跨域读写是不行的。

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

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

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

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

© 2021 V2EX