Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

前后端分离开发是不是信息泄露无法避免? #2298

Open
TopTopFly opened this issue Jun 27, 2019 · 11 comments
Open

前后端分离开发是不是信息泄露无法避免? #2298

TopTopFly opened this issue Jun 27, 2019 · 11 comments

Comments

@TopTopFly
Copy link

本项目中的路由总表、国际化文件,都可以把项目中很多信息泄露出去。 比如本项目,无需用户登录,就可以在浏览器,通过开发者工具,查看zh.js, router/index.js的全部内容,就很容易知道后台设置了什么目录,网站管理员有哪些特殊权限等。

前后端分离开发是不是信息泄露无法避免?

@jaihao
Copy link

jaihao commented Jun 28, 2019

其实也和你一样考虑到这些问题、像请求的一些数据api、token之类的F12一样是看的清清楚楚的

@mayunhai
Copy link
Contributor

不存在的,token就是身份令牌会动态变化的。传统MVC项目中的身份令牌一样会放在 cookie 里面F12一样可以看得到。

@mayunhai
Copy link
Contributor

至于 API 数据 ,本来就是为了展示的数据不存在所谓的信息泄露,如果你非要隐藏API域名,可以用代理rewrite 路由, 而且这样可以解决跨域问题,webpack 以及打包发布的服务器都可以配置

@TopTopFly
Copy link
Author

至于 API 数据 ,本来就是为了展示的数据不存在所谓的信息泄露,如果你非要隐藏API域名,可以用代理rewrite 路由, 而且这样可以解决跨域问题,webpack 以及打包发布的服务器都可以配置

不只是API数据。再举个例,从后台服务器根据用户权限获取路由和目录,需要在前端预设一个routeMap,把后台json返回的字符串映射成vue调用的页面函数。这个routerMap会包含前端所有路由信息。而问题就在于无需登录,只需要F12,routerMap的所有信息都一览无遗。
如果用国际化的话,zh.js也会暴露不少信息。

@tunghsingw
Copy link

是个好问题,前后端分离促进了思考。
如果用懒人写法,无论是后端为主还是前后分离都会暴露信息。不过如果采用全后端方案,前端能拿到的信息是有限的,但是用大前端思维,大前端如果偷个懒,许多东西在自己这管理,泄露更多的信息是必然的,比如作者“比较恐惧被被后端支配”,所以肯定会流露出一些信息,但是这些信息,一般情况下价值并不高,对于系统安全的破坏性也不大,比如路由信息,其实作用不大,只有认证信息才是关键。
系统安全应该考虑私密性和安全性(认证和授权两部分),如果要做到安全性和私密性同时安全,还是要前后端配合,你所有不想让用户直接看到的,都由后端给你动态提供,而认证信息,可以通过双向认证,每一个请求都动态的更新一个令牌,同时后端记录信息的延续性。后端对于每个请求都验证授权和身份。
比较安全的系统是不希望你看到的就动态获取,而你不得不看到的(比如token),则是用你明知道是加密的,但是你不知道用什么算法,即使知道算法也是不可逆的,即使你截获了,也不可以直接用(已经过期了或者token需要再次加解密)。

@HydrogenPan19
Copy link

  1. 不管能不能看到,后端做好权限认证就没问题了
  2. 前端路由表,实在不想被看到,可以按权限分 未登录、普通用户、管理员,根据不同的角色加载不同路由表回来就好

@HydrogenPan19
Copy link

国际化也同理,整个项目的本地化信息都在 zh.js ,这是偷懒的做法。划分好模块,语言文件跟随对应的页面加载就好了

@a869057476
Copy link

至于 API 数据 ,本来就是为了展示的数据不存在所谓的信息泄露,如果你非要隐藏API域名,可以用代理rewrite 路由, 而且这样可以解决跨域问题,webpack 以及打包发布的服务器都可以配置

不只是API数据。再举个例,从后台服务器根据用户权限获取路由和目录,需要在前端预设一个routeMap,把后台json返回的字符串映射成vue调用的页面函数。这个routerMap会包含前端所有路由信息。而问题就在于无需登录,只需要F12,routerMap的所有信息都一览无遗。
如果用国际化的话,zh.js也会暴露不少信息。

生产环境打的包不是已经采用压缩混淆了吗,F12看到的能看得懂?

@HydrogenPan19
Copy link

生产环境打的包不是已经采用压缩混淆了吗,F12看到的能看得懂?

生产环境打包一般只是压缩,不做混淆的。一般慢慢调试都可以得到想要的信息

@teri5354
Copy link

teri5354 commented Jul 4, 2019

1、动态路由,根据后端的角色返回该用户有权限的路由动态加载出来
2、token机制
3、调用api时,也可以加入权限控制机制的呀,判断用户是否已经登录,该用户有没有访问该api的权限
一般这样做都没什么大问题了啦

@Minitiai
Copy link

Minitiai commented May 13, 2020

至于 API 数据 ,本来就是为了展示的数据不存在所谓的信息泄露,如果你非要隐藏API域名,可以用代理rewrite 路由, 而且这样可以解决跨域问题,webpack 以及打包发布的服务器都可以配置

不只是API数据。再举个例,从后台服务器根据用户权限获取路由和目录,需要在前端预设一个routeMap,把后台json返回的字符串映射成vue调用的页面函数。这个routerMap会包含前端所有路由信息。而问题就在于无需登录,只需要F12,routerMap的所有信息都一览无遗。
如果用国际化的话,zh.js也会暴露不少信息。

实际上,login api 获取 token
getInfo api 获取该账号的路由表以及初始化等数据
未登录好像不存在啥问题,
登陆后的话,改路由表数据倒是可以改,
但是页面权限可以采用双向验证token的方法
相当于改了全部路由也打不开页面,并得不到数据,应该就没信息泄露了
而且像是数据的增删改查,肯定是要双向验证token权限的

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

8 participants