请教一个 web 接口的安全性问题

2018-04-24 17:37:18 +08:00
 jiuwuerqi

前端就是简单的 :html+js

背景 1: 生成认证流程:1:C 端用户登录 -》服务端生成 token -》带回到 C 端,存储 cookie 中 调其他的 web 接口必须带上 token,进行一些校验(时效,ip 等等)

问题:这样被抓包了,别人拿到了 token,就可以调其他的 web 接口.并且可以任意的传递参数!!

背景 2: 在 1 的基础上加上签名参数(sign,加个 时间戳 用 md5 加密)这样即使你拿到了我的 token,但是你不能对我们的参数进行修改

问题:js 会暴露加密的过程!!

暂时就想到这两个安全性的问题,不知道各位有什么好的方式??

2691 次点击
所在节点    问与答
22 条回复
x7395759
2018-04-24 19:00:50 +08:00
https
Ryans
2018-04-24 19:04:47 +08:00
JWT 了解一下
3a3Mp112
2018-04-24 19:11:19 +08:00
token 被拿走是没办法的。 目前好像没解决方案。
chinvo
2018-04-24 19:13:15 +08:00
HTTPS + HSTS 防中间人
token 确保认证授权
sign 防篡改
chinvo
2018-04-24 19:13:34 +08:00
服务器端校验不信任任何客户端输入
chinvo
2018-04-24 19:15:30 +08:00
理论上来讲,没必要全面禁止自行提交数据,反正只要服务器校验限定了数据的类型和范围,通过页面提交和通过 curl 提交并没有区别。

如果是防机器人提交,可以引入 ReCAPTCHA,防爬可以引入 cookie 验证、频率限制等机制
icy37785
2018-04-24 22:07:00 +08:00
只能增加难度,没办法彻底杜绝,加密和解密从来都是找加密信息价值和解密时间成本之间平衡点
yxwzaxns
2018-04-24 23:25:31 +08:00
说 jwt 的真的大丈夫?
zjp
2018-04-24 23:58:05 +08:00
token 不应该是服务器端生成吗,前端不知道加密算法和盐。
bazingaterry
2018-04-25 00:21:18 +08:00
怕 token 被抓走就和 ip 綁定吧,參考銀行。
WilliamLin
2018-04-25 00:35:17 +08:00
https 用于 token 防止被抓包,token 在后端生成,并可加入 ip 和 user agent 等信息,下次检验时不同,则认为 token 无效。
LeungJZ
2018-04-25 00:40:54 +08:00
@WilliamLin
请问下,这个 token 该如何生成呢?
能给个思路吗?
WilliamLin
2018-04-25 00:47:58 +08:00
我之前的一种做法,就是生成随机字符串,然后用这来做 id,加上需验证的信息写入数据库。如果不想这样,可了解 itsdangerous
WilliamLin
2018-04-25 00:48:14 +08:00
@LeungJZ 我之前的一种做法,就是生成随机字符串,然后用这来做 id,加上需验证的信息写入数据库。如果不想这样,可了解 itsdangerous
NicholasYX
2018-04-25 07:09:37 +08:00
个人感觉后台加验证,然后传入数据都是正常数据的话无所谓的
ChefIsAwesome
2018-04-25 09:08:12 +08:00
https + 较短的过期时间。
jiuwuerqi
2018-04-25 15:59:06 +08:00
@zjp token 是服务端生成,但是你要把 token 带回前端,下次请求要带上 token。
问题在于别人 抓到了你的 token,就可以请求了。
然后进一步的新增一个 sign,来保证防止数据被出篡改,因为 sign 是在前端进行加密的,那么 js 容易暴露加密流程
jiuwuerqi
2018-04-25 16:05:42 +08:00
@WilliamLin ip 和 agent 都是可以模拟的吧,我现在只是加了 ip,就是每次切换网段( WIFI -> 4G 之类的),要重新获取 token,用户体验可能会差一些 @icy37785 说的不错,只能增加难度,难度越大,性能就越低吧。
jiuwuerqi
2018-04-25 16:12:19 +08:00
@chinvo 我不太懂验证码的原理,防止机器人提交的话,小白的问下,验证码是不是服务器生成会更安全一些?
chinvo
2018-04-25 16:36:32 +08:00
@jiuwuerqi #19 传统意义上的图片(字符)验证码已经很难防止机器人识别了,因此引入更加强力的验证码是有必要的。

说 ReCAPTCHA 第二,估计也就只有国内某些厂家敢称第一

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

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

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

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

© 2021 V2EX