zoukankan      html  css  js  c++  java
  • 基于数据的访问控制 --- 服务器端

    举个例子,评论功能是一个非常常见的功能,用户可以在客户端发起评论,回复评论,查看评论,删除评论等操作。一般情况下,只有本人才可以删除自己的评论,如果此时,业务层面没有建立数据的访问控制,那么用户甲可以试图绕过客户端,通过调用服务端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);
      }
    }
     
    总结下,基于角色的访问控制一种垂直权限控制,通过建立用户与角色的对应关系,使得不同角色之间具有高低之分。用户根据拥有的角色进行操作与资源访问。基于数据的访问控制一种水平权限控制,它对角色内的用户做细分,确保用户的数据不能越权操作
     
    基于数据的访问控制,需要业务层面去处理,但是这个也是最为经常遗落的安全点,需要引起重视。
  • 相关阅读:
    14.18 InnoDB Backup and Recovery 备份和恢复:
    14.18 InnoDB Backup and Recovery 备份和恢复:
    php使用 _before_index() 来实现访问页面前,判断登录
    php使用 _before_index() 来实现访问页面前,判断登录
    查询方式实例演示
    查询方式实例演示
    haproxy timeout server 46000 后台超时时间
    haproxy timeout server 46000 后台超时时间
    14.10.5 Reclaiming Disk Space with TRUNCATE TABLE 回收空间使用TRUNCATE TABLE
    14.10.5 Reclaiming Disk Space with TRUNCATE TABLE 回收空间使用TRUNCATE TABLE
  • 原文地址:https://www.cnblogs.com/feixiablog/p/8167326.html
Copyright © 2011-2022 走看看