V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
letitbesqzr
V2EX  ›  Java

Spring mvc + jpa 执行更新操作的一个安全性问题

  •  
  •   letitbesqzr · 2015-06-10 21:42:01 +08:00 · 2661 次点击
    这是一个创建于 3241 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景

    有一个表:Member
    字段: id username password sex name age .........
    字段比较多,在后台接收参数:

    public String updateInfo(Member member){
    memberDao.update(member);
    }

    在一个修改用户资料的页面,只允许修改一些基本信息(姓名 年龄 性别 之类的),在前台的地方构建 sex name age 三个表单,提交到方法内,由spring mvc自动给set到bean去..

    遇到的问题

    这样就有一安全问题,如果这个用户是不允许修改用户名 或者 不允许修改密码的... 用户猜到是用这个模式进行的更新操作,自己构造 username password 参数提交,spring mvc 找到member中有这些属性,就自动设置上去了.. 执行update的时候就会一并更新了。

    自己想到的解决办法

    如果不用自动设置到bean的模式,单独接收每一个参数,那如果参数很多就会非常的乱而且繁琐,请问各位有没有一个比较好的解决方案。

    6 条回复    2015-06-11 10:21:45 +08:00
    cloudhunter
        1
    cloudhunter  
       2015-06-10 22:02:25 +08:00   ❤️ 1
    做 updateInfo 之前,检查下用户有没有相应的更新字段权限不就结了
    letitbesqzr
        2
    letitbesqzr  
    OP
       2015-06-10 22:03:59 +08:00
    @cloudhunter 那样做的麻烦程度,不就和每个参数都单独接收一样了?
    saximoer
        3
    saximoer  
       2015-06-10 22:07:49 +08:00   ❤️ 1
    页面上看到的VO 对象和实际的ENTITY 不是一个对象即可~
    monsoon
        4
    monsoon  
       2015-06-10 22:43:08 +08:00 via Android   ❤️ 1
    搜索 BeanUtils
    BuilderQiu
        5
    BuilderQiu  
       2015-06-11 09:27:54 +08:00   ❤️ 1
    前后台不是一个VO,转换一次即可
    or
    根据ID或者登陆用户什么的查询出被修改的数据,然后从前台传来的对象中取出有权限修改的部分赋值,更新。
    letitbesqzr
        6
    letitbesqzr  
    OP
       2015-06-11 10:21:45 +08:00
    @BuilderQiu 采用第二种方案.. 3q
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3325 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 12:31 · PVG 20:31 · LAX 05:31 · JFK 08:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.