前端就是简单的 :html+js
背景 1: 生成认证流程:1:C 端用户登录 -》服务端生成 token -》带回到 C 端,存储 cookie 中 调其他的 web 接口必须带上 token,进行一些校验(时效,ip 等等)
问题:这样被抓包了,别人拿到了 token,就可以调其他的 web 接口.并且可以任意的传递参数!!
背景 2: 在 1 的基础上加上签名参数(sign,加个 时间戳 用 md5 加密)这样即使你拿到了我的 token,但是你不能对我们的参数进行修改
问题:js 会暴露加密的过程!!
暂时就想到这两个安全性的问题,不知道各位有什么好的方式??
1
x7395759 2018-04-24 19:00:50 +08:00
https
|
2
Ryans 2018-04-24 19:04:47 +08:00
JWT 了解一下
|
3
3a3Mp112 2018-04-24 19:11:19 +08:00
token 被拿走是没办法的。 目前好像没解决方案。
|
4
chinvo 2018-04-24 19:13:15 +08:00
HTTPS + HSTS 防中间人
token 确保认证授权 sign 防篡改 |
5
chinvo 2018-04-24 19:13:34 +08:00
服务器端校验不信任任何客户端输入
|
6
chinvo 2018-04-24 19:15:30 +08:00
理论上来讲,没必要全面禁止自行提交数据,反正只要服务器校验限定了数据的类型和范围,通过页面提交和通过 curl 提交并没有区别。
如果是防机器人提交,可以引入 ReCAPTCHA,防爬可以引入 cookie 验证、频率限制等机制 |
7
icy37785 2018-04-24 22:07:00 +08:00 via iPhone
只能增加难度,没办法彻底杜绝,加密和解密从来都是找加密信息价值和解密时间成本之间平衡点
|
8
yxwzaxns 2018-04-24 23:25:31 +08:00 via iPhone
说 jwt 的真的大丈夫?
|
9
zjp 2018-04-24 23:58:05 +08:00 via Android
token 不应该是服务器端生成吗,前端不知道加密算法和盐。
|
10
bazingaterry 2018-04-25 00:21:18 +08:00 via iPhone
怕 token 被抓走就和 ip 綁定吧,參考銀行。
|
11
WilliamLin 2018-04-25 00:35:17 +08:00 via Android
https 用于 token 防止被抓包,token 在后端生成,并可加入 ip 和 user agent 等信息,下次检验时不同,则认为 token 无效。
|
12
LeungJZ 2018-04-25 00:40:54 +08:00
|
13
WilliamLin 2018-04-25 00:47:58 +08:00 via Android
我之前的一种做法,就是生成随机字符串,然后用这来做 id,加上需验证的信息写入数据库。如果不想这样,可了解 itsdangerous
|
14
WilliamLin 2018-04-25 00:48:14 +08:00 via Android
@LeungJZ 我之前的一种做法,就是生成随机字符串,然后用这来做 id,加上需验证的信息写入数据库。如果不想这样,可了解 itsdangerous
|
15
NicholasYX 2018-04-25 07:09:37 +08:00 via iPhone
个人感觉后台加验证,然后传入数据都是正常数据的话无所谓的
|
16
ChefIsAwesome 2018-04-25 09:08:12 +08:00
https + 较短的过期时间。
|
17
jiuwuerqi OP @zjp token 是服务端生成,但是你要把 token 带回前端,下次请求要带上 token。
问题在于别人 抓到了你的 token,就可以请求了。 然后进一步的新增一个 sign,来保证防止数据被出篡改,因为 sign 是在前端进行加密的,那么 js 容易暴露加密流程 |
18
jiuwuerqi OP @WilliamLin ip 和 agent 都是可以模拟的吧,我现在只是加了 ip,就是每次切换网段( WIFI -> 4G 之类的),要重新获取 token,用户体验可能会差一些 @icy37785 说的不错,只能增加难度,难度越大,性能就越低吧。
|
20
chinvo 2018-04-25 16:36:32 +08:00
|
22
WilliamLin 2018-04-25 18:23:46 +08:00 via Android
@jiuwuerqi 看你系统用户数,如果系统就万把来人用,不用去担心性能问题,另外,我是用了 nosql 的 kv 来保存 token 的
|