防止其他人通过用户的url访问用户私人数据

1,数据是用户私人的,只能被用户自己查看,如果防止其他人通过url访问数据?

2,访问都需要登陆操作,session中放入userId, 记录中放入userId,每次访问的时候根据url中记录id 得到数据,根据数据中的userId 和session中的userId 是否匹配判断是否是用户本人访问??
但是这样就会导致需要查询数据库之后才可以得知结果

3,url中放入userId,根据url中的usrId和session中保存的userId 进行匹配判断是否是本人访问,
这样会将userId暴漏在url中

各位都是怎么做的

阅读 7.2k
13 个回答

既然是私人数据,那就不需要在路由中体现 userId,登录之后,一切数据依据SESSION中的userId去查询,怎么可能会出现访问到其它用户的数据呢

1、userid不要放到url中

2、采用token,jwt加时间戳,放到每次请求的header中

方法1.使用session,如果seesion直接throw
方法2.生成token,存在redis或者其它缓存机制,同是你也可以存放一些,比如uid,权限,请求限制

可以使用redis替数据库做用户验证

订单变中肯定要存用户 id,查询的时候根据订单id和用户id来查询,订单id可暴露,用户id通过session过去,不要直接暴露给用户。

每个页面肯定会有请求,请求时候会带上用户信息,用户登录后才会有用户信息。所以只要判断是否可以拿得到用户信息就知道既可以了,拿不到用户信息就让用户去登陆就好了!

我明白你的意思,我的想法是这样的。
每次用户用自己的 url 访问服务器去拿数据,服务器会用一种算法算出一个种子,然后发送给用户登陆时所用的浏览器的缓存中,当然有时间限制。只是这个种子必须要存在数据库中

目前,多数的解决方案是token session设置时间限制!

用户登录成功后保存相关数据到session,从session里取出用户的ID,每次查询条件都加上该id。

url做成通用的,数据请求需要用户自己主动触发

新手上路,请多包涵

私人数据的ID如果不和用户ID做关联,其他用户在被授权了的情况下,就有可能通过枚举数据ID的方式,访问到别的用户的私人数据,个人感觉只要查询的时候多拿出用户ID,然后在程序中比对下,也还好吧

一个url就能访问到别人的私人数据,只能说明你做的东西太那个啥了。你看看别人都是咋开发的,同样的URL只可以访问已登录用户自己的数据。对于保密的数据不仅不能让其他人随意的通过URL访问,还得防止爬虫抓取。河南农业大学的系统就存在类似的漏洞,所以既然是隐私数据,那么保密工作不仅仅是一个URL的事儿,服务器配置各方面都有。就像上述河南农业大学的学生私人信息其实就是服务器配置不当,那么后台系统层面该做的就是授权与鉴权。所以虽然URL一样,但只有授权过的用户才能让他看

和csrf非常类似

这个方法 可以不用查询数据库。
在路由地方增加一个中间件,把需要验证的路由全部走这个中间件。
每次用户登录的时候生成一个比较长的hash码(保证每个用户不重复) session 保存这个 hash
每次请求的时候验证这个 hash 就好了。
每次登录都不同,不纯在泄漏问题

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题