如何防止未经授权的用户删除我的域模型中的对象?

use*_*512 2 java orm spring hibernate sql-injection

我有类似的领域模型

  • 1)用户.每个用户都有很多城市.@OneToMany(targetEntity=adv.domain.City.class...)
  • 2)城市.每个城市都有很多地区 @OneToMany(targetEntity=adv.domain.Distinct.class)
  • 3)Distintc

我的目标是当用户在浏览器中按删除按钮时删除不同.在该控制器获得不同的id并将其传递给业务层.其中方法DistinctService.deleteDistinct(Long distinctId)应该委派给DAO层.

所以我的问题是在哪里放置安全限制以及实现它的最佳方法是什么.我想确定我删除了真实用户的不同,即城市的真正所有者,而城市是不同的真正所有者.因此,没有人可以使用像localhost/deleteDistinct/5这样的简单URL删除所有者的ditinct.

我可以从我的控制器中的httpSession获取用户并将其传递给商务层.

之后,我可以获得该用户的所有城市并对其进行评估以确定,即citie.id == distinct.city_id,然后删除distinct.

但在我看来这很荒谬.

我也可以写这样的SQL查询...

delete from 
  t_distinct 
where 
  t_distinct.city_id in (
    select 
      t_city.id 
     from 
       t_city 
       left join t_user on t_user.id = t_city.owner_id 
     where 
       t_user.id = ?
  ) 
  and t_distinct.id = ?
Run Code Online (Sandbox Code Playgroud)

那么添加这样的限制的最佳做法是什么.

我正在使用Hibernate,Spring,Spring MVC ..

谢谢

Jay*_*ymz 5

您要求的不是SQL注入预防.您需要确保尝试删除的用户已获得授权.

只要您检查访问该页面的用户是否有权删除您尝试删除的行(这将在业务层中进行检查),并且只有在用户通过身份验证并授权执行操作时才允许删除命令.