• 基于数据的访问控制 --- 服务器端


    举个例子,评论功能是一个非常常见的功能,用户可以在客户端发起评论,回复评论,查看评论,删除评论等操作。一般情况下,只有本人才可以删除自己的评论,如果此时,业务层面没有建立数据的访问控制,那么用户甲可以试图绕过客户端,通过调用服务端RESTful API 接口,猜测评论 ID 并修改评论 ID 就可以删除别人的评论。事实上,这是非常严重的越权操作。除此之外,用户之间往往也存在一些私有的数据,而这些私有的数据在正常情况下,只有用户自己才能访问。
     
    基于数据的访问控制,需要业务层面去处理,但是这个也是最为经常遗落的安全点,需要引起重视。这里,再次使用删除评论的案例,通过 Java 语言进行介绍。在这个案例中,核心的代码片段在于,判断当前用户是否是评论的创建者,如果是则通过,不是则报出没有权限的错误码。那么,这样就可以很好地防止数据的越权操作。
     
    @RestController
    @RequestMapping(value = {"/v1/c/apps"})
    public class AppCommentController{
     
      @Autowired
      private AppCommentService appCommentService;
     
      @RequestMapping(value = "/{appId:\d+}/comments/{commentId:\d+}",  method = RequestMethod.DELETE)
      public void deleteAppCommentInfo(@PathVariable Long appId, @PathVariable Long commentId, @AuthenticationPrincipal UserInfo userInfo)
      {
        AppComment appComment = this.appCommentService.checkCommentInfo(commentId);
        
         // 判断当前用户是否是评论的创建者,如果是则通过,不是则报出没有权限的错误码。
         if(!appComment.getUserId().equals(Long.valueOf(userInfo.getUserId()))){
          throw new   BusinessException(ErrorCode.ACCESS_DENIED);
        }
        this.appCommentService.delete(commentId);
      }
    }
     
    总结下,基于角色的访问控制一种垂直权限控制,通过建立用户与角色的对应关系,使得不同角色之间具有高低之分。用户根据拥有的角色进行操作与资源访问。基于数据的访问控制一种水平权限控制,它对角色内的用户做细分,确保用户的数据不能越权操作
     
    基于数据的访问控制,需要业务层面去处理,但是这个也是最为经常遗落的安全点,需要引起重视。
  • 相关阅读:
    Android-通过SlidingPaneLayout高仿微信6.2最新版手势滑动返回(一)
    B树
    nyoj448 寻找最大数
    IT痴汉的工作现状22-由Dalvik虚拟机引发的口水战
    POJ 3221 Diamond Puzzle.
    CMDBuild安装及webservice接口的获取
    安卓dex 文件结构简要说明
    安装RPM包或者安装源代码包
    Java程序性能优化技巧
    [Sqlite]-->数据迁移备份--从低版本号3.6.2到高版本号3.8.6
  • 原文地址:https://www.cnblogs.com/feixiablog/p/8167326.html
Copyright © 2020-2023  润新知