前后端分离开发后台遇到的问题

2019-11-23 04:36:21 +08:00
 kajweb

登陆

正确返回{status:200,data: {token:xxx}}

错误返回{status:100,data: false}

问题

然后被人使用 fidder 将登陆失败时的返回修改为正确,成功进入后台管理页面(可以看到管理页面的结构),但是获得不了数据。

获取数据结构返回{status:403,data: false} 又被强行修改为 200。

editor 的上传接口没有鉴权和图片处理,导致图片被成功上传。

然后现在的问题是:登陆应该怎么拦截,才能不被绕过。

前端使用 VUE 非 SSR 模式

2278 次点击
所在节点    程序员
29 条回复
throns
2019-11-23 04:54:44 +08:00
登陆之后获取用户信息
throns
2019-11-23 05:04:58 +08:00
上 https
eason1874
2019-11-23 05:41:07 +08:00
逻辑上讲很简单啊。

一、把访客页面和管理页面拆开,管理页面资源(包括 editor )全部通过鉴权才能加载。
二、editor 接口加上鉴权。
seki
2019-11-23 06:07:25 +08:00
不管怎么样后端都是要加鉴权的。前后端分离的 SPA 的情况下,前端的鉴权只是用户体验上的改进,完全不可依赖。不管你加什么逻辑,用户在你的代码里面把逻辑删掉就还是能愉快地跑
donyee
2019-11-23 06:26:30 +08:00
后端是 Java 的话,加上过滤器判断一下,其他语言框架不了解
ericgui
2019-11-23 06:29:34 +08:00
对啊,怎么不鉴权呢
Leigg
2019-11-23 07:05:01 +08:00
资源上传接口不仅要鉴权,还要限制资源类型,大小,防止被当做网盘用或者恶意攻击。
Immortal
2019-11-23 07:51:41 +08:00
后端看起来是鉴权了的 但是没有写在拦截器、中间件一类的地方
不然不会出现接口数据 403 了
图片上传的路由应该放在了“无需校验”的那一块了 和后端沟通下 改下就好了
其实我觉得如果 editor 能上传 根本无需大费周章的用 fidder 改 status 拿到上传路由直接 postman 应该也能成功
Immortal
2019-11-23 07:52:24 +08:00
@Immortal
“后端看起来是鉴权了的 但是没有写在拦截器、中间件一类的地方”
改为
“后端看起来是鉴权了的 但是没有把上传路由加在拦截器、中间件一类的地方”
keepeye
2019-11-23 09:15:08 +08:00
上传文件加上鉴权就是了 前端也只能那样了
geekdocs
2019-11-23 10:11:02 +08:00
上传接口都不鉴权,真是艺高人胆大~
Vhc001
2019-11-23 10:21:18 +08:00
@throns #2 https 是防止中间人攻击的,你让楼主上 https 就是掩耳盗铃了。
chongzi
2019-11-23 10:23:11 +08:00
好巧,这部分逻辑我刚重新理了
1.接口方法和前端操作分别管理
2.前端操作关联接口方法(多对多)
3.用户权限最终关联前端操作(中间可能还有角色、部门、岗位之类的关联)
这样达成的效果
1.前端界面能显示哪些内容(包括菜单)依赖登录后接口返回的权限数据(前端操作列表)
2.即便他了解你的系统可以手动构造数据访问接口,接口也可以判断他有没有权限
Vhc001
2019-11-23 10:24:04 +08:00
@throns #2 https 是防止中间人攻击的,并不能防止客户端修改数据,就像你网站上 https 并不能防止访客浏览器上安装的插件拦截网站广告一样。你让楼主上 https 就属于掩耳盗铃了。
kajweb
2019-11-23 10:33:54 +08:00
@throns @Immortal 是使用代理直接修改返回数据了,与后端无关。
@eason1874 @geekdocs 管理页面已经拆开了,首页暴露管理入口。然后被绕过登陆了。
@ericgui 之前不知道怎么回事没有鉴权,现在修改了。
@Leigg 谢谢提醒
@Immortal 当时是后端上传接口漏加上这个了,现在已经堵上了。
@chongzi 就是接口直接返回 403,他看不到数据和上传 /发布数据。稍后我发图说明一下流程。之前讨论过动态菜单,但是想了一下菜单还是写在 route 上了,好像也是能进入页面(可能想得不对)

上传图片那个地方已经修改了,之前是由于某个原因没有加上,现在已经堵上了。
就是登陆想不通,应该如何返回数据来限制直接修改数据进行登陆。
像 @seki 说的,直接在前端删除管理页面的拦截逻辑有没有可能防范?(除非服务器渲染?)
虽然绕过登陆后看不到数据啥的,但是能进去就感觉有一点点奇怪。
CoderGeek
2019-11-23 10:36:03 +08:00
统一鉴权 你这个权限问题
chongzi
2019-11-23 10:49:07 +08:00
最坏的情况,他对你的系统了如指掌,
手动修改了接口返回的数据、直接修改了 js 变量、甚至手动写了个跟你系统一样的页面
只要他无法正常访问你的接口,就不会对你的系统造成任何影响
这还有什么顾虑呢
chongzi
2019-11-23 11:15:31 +08:00
如果他只是修改了登录接口返回的状态码,而没有修改返回的具体数据(比如前端操作列表)
那你完全可以在 router 跳转的时候拦截
annielong
2019-11-23 11:31:39 +08:00
所以使用 cookie 不是没有原因的,想用 token 就所有页面都加验证
hyy1995
2019-11-23 11:42:06 +08:00
看到你列出来的④和⑤,好像这样是无解了。。。

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

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

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

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

© 2021 V2EX