自动化测试特定区域滑动

实际上,每个Web应用程序都应该有多个用户,并且每个用户都有一些数据-帖子,文档,消息等等。 最明显的事情是保护这些实体免遭非这些资源合法所有者的用户获取。

不幸的是,这不是最容易的事情。 我并不是说很难,它不像简单地返回资源那样直观。 当您是/record/{recordId}端点时,您将立即执行对recordId的数据库查询。 只有这样,才需要检查此记录是否属于当前经过身份验证的用户。

框架在这里没有帮助,因为这种访问控制和所有权逻辑是特定于域的。 没有明显的通用方法来定义所有权。 它取决于实体模型和实体之间的关系。 在某些情况下,它可能非常复杂,其中涉及在联接表中查找(用于多对多关系)。

但是您应该自动执行此操作,原因有两个。 首先,在每个端点/控制器方法上手动执行这些检查很繁琐,并且使代码难看。 其次,更容易忘记添加这些检查,尤其是在有新开发人员的情况下。

您可以在DAO的所有地方进行这些检查,但通常应尽早失败,因此这些检查应在控制器(端点处理程序)级别上进行。 对于Java和Spring,可以使用批注和HandlerInterceptor来自动执行此操作。 在使用任何其他语言或框架的情况下,也可以使用类似的方法-一些可插入的方式来描述要检查的所有权关系。

以下是放置在每个控制器方法上的示例注释:

public @interface VerifyEntityOwnership {String entityIdParam() default "id";Class<?> entityType();
}

然后定义拦截器(当然,应将其配置为执行)

@Component
public class VerifyEntityOwnershipInterceptor extends HandlerInterceptorAdapter {private static final Logger logger = LoggerFactory.getLogger(VerifyEntityOwnershipInterceptor.class);@Autowiredprivate OrganizationService organizationService;@Autowiredprivate MessageService MessageService;@Autowiredprivate UserService userService;@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {Authentication authentication = SecurityContextHolder.getContext().getAuthentication();// assuming spring-security with a custom authentication token typeif (authentication instanceof ApiAuthenticationToken) {AuthenticationData authenticationData = ((ApiAuthenticationToken) authentication).getAuthenticationData();UUID clientId = authenticationData.getClientId();HandlerMethod handlerMethod = (HandlerMethod) handler;VerifyEntityOwnership annotation = handlerMethod.getMethodAnnotation(VerifyEntityOwnership.class);if (annotation == null) {logger.warn("No VerifyEntityOwnership annotation found on method {}", handlerMethod.getMethod().getName());return true;}String entityId = getParam(request, annotation.entityIdParam());if (entityId != null) {if (annotation.entityType() == User.class) {User user = userService.get(entityId);if (!user.getClientId().equals(clientId)) {return false;}} else if (annotation.entityType() == Message.class) {Message record = messageService.get(entityId);if (!message.getClientId().equals(clientId) {return false;}} // .... more}}return true;}@SuppressWarnings("unchecked")private String getParam(HttpServletRequest request, String paramName) {String value = request.getParameter(paramName);if (value != null) {return value;}Map<String, String> pathVariables = (Map<String, String>) request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);return pathVariables.get(paramName);}
}

您会看到这假定每种类型都需要自定义逻辑。 如果您的模型很简单,则可以使之通用–使所有实体都使用它们都定义的getClientId()方法实现某些Owned接口。 然后只需拥有dao.get(id, entityClass); 并避免使用特定于实体的逻辑。

请注意,当方法上没有注释时,将显示警告-那里表示您可能已忘记添加一个方法。 某些端点可能不需要所有权检查–对于它们,您可以具有特殊的@IgnoreEntityOwnership批注。 关键是要做出有意识的决定,不验证所有权,而不是忘记所有权并引入安全问题。

我的意思可能很明显。 但是我已经看到了许多这种遗漏的例子,包括生产政府项目。 就像我说的,框架不会强迫您考虑这一方面,因为它们不能以通用的方式做到这一点– Web框架通常与实体模型无关,而ORM与控制器无关。 有处理所有这些方面的综合框架,但是即使它们没有通用的机制 (至少我没有意识到)。

安全性包括将一套良好实践和原则应用于系统。 但是,它还包括一些程序和自动化程序,这些程序和自动化程序可以帮助开发人员和管理员不要忽略他们通常知道的东西,而会时不时地忘记。 而且,应用安全性原则越乏味,则一贯地应用它的可能性就越大。

翻译自: https://www.javacodegeeks.com/2018/10/automate-access-control-user-entities.html

自动化测试特定区域滑动

自动化测试特定区域滑动_自动化用户特定实体的访问控制相关推荐

  1. 自动化用户特定实体的访问控制

    实际上,每个Web应用程序都应该有多个用户,每个用户都有一些数据-帖子,文档,消息等等. 最明显的事情是保护这些实体免遭非这些资源合法所有者的用户获取. 不幸的是,这不是最容易的事情. 我并不是说很难 ...

  2. robotframework自动化测试修炼宝典_自动化测试之框架Cucumber和RobotFramework的实战对比...

    读完需要 18分钟 速读仅需 6 分钟 本文首发表于 InfoQ:http://www.infoq.com/cn/articles/cucumber-robotframework-comparison ...

  3. 用户与实体行为分析在实时网络攻击检测中的角色

    The role of User Entity Behavior Analytics to detect network attacks in real time 用户与实体行为分析在实时网络攻击检测 ...

  4. 【Python自动化测试32】App自动化环境搭建

    文章目录 一.前言 二.安装与环境搭建教学 2.1 环境依赖 2.2 appium程序安装 2.3 appium-python-client 2.4 模拟器安装 2.5 java jdk安装 2.6 ...

  5. LTE下行用户特定参考信号

    1. 简介 LTE下行用户特定参考信号(UE-specific Reference Signal),又称解调参考信号(DeModulation Reference Signal,DMRS).所谓&qu ...

  6. 企业安全中的用户与实体行为分析

    User and Entity Behavior Analytics for Enterprise Security 企业安全中的用户与实体行为分析 期刊/会议:2016 IEEE Internati ...

  7. Selenium+python怎么搭建自动化测试框架、执行自动化测试用例、生成自动化测试报告、发送测试报告邮件

    目录 一.项目结构介绍 1.mztestpro测试项目 2.bbs目录 3.test_case 二.编写公共模块 三.编写Page Object 四.编写测试用例 五.执行测试用例 小结: 本人在网上 ...

  8. 使用用户行为实体分析和数据可视化的异常检测

    Anomaly Detection using User Entity Behavior Analytics and Data Vsualization 使用用户行为实体分析和数据可视化的异常检测 1 ...

  9. Linux创建指定用户特定指定目录权限

    指定用户特定指定目录权限 需要注意要指定好文件夹的权限,不然会导致nginx不能访问,最好是在root下建立目录,然后 # useradd -d /usr/www -m tempuser # pass ...

最新文章

  1. Matlab与数据结构 -- 对向量的排序
  2. 如何理解“异或(XOR)”运算在计算机科学中的重要性?(转自-阿里聚安全)...
  3. 广汽研究院BMS软件工程师_八大高手齐聚CATIA决赛,3人获“广汽技术创新能手”...
  4. android自定义push通知_20个海外Web和App推送通知服务工具
  5. Qt中QMap删除元素的简单使用
  6. windows2019域控降级退域
  7. DTCMS插件的制作实例电子资源管理(三)前台模板页编写
  8. 配置六 ip default-network
  9. 宽带和流量是分开的吗_宽带
  10. 到底是大数据还是“拍脑门”?
  11. Hadoop集群部署模型纵览3
  12. 发票验证出现服务器证书出错,网上认证发票平台证书密码出现错误怎么办?
  13. matlab数字图像处理实验报告
  14. 计算机教室布置图cad,CAD制作平面图教程制作教室
  15. 我为什么不要应届毕业生
  16. 未明学院:产品经理到底在职场中过得怎么样?
  17. 服务化系统容量评估和性能保障
  18. 计算机主机突然断电有什么影响,电脑突然断电对硬件有影响吗?电脑突然断电的危害...
  19. ACwing每日一题3565暴力 绝对值不等式 中位数思维
  20. 【蓝桥杯真题】成绩统计

热门文章

  1. 牛客网【每日一题】3月25日 tokitsukaze and Soldier
  2. 模板:半平面交(计算几何)
  3. CF1009F-Dominant Indices【长链剖分】
  4. POJ2752-Seek the Name, Seek the Fame【KMP】
  5. Top Secret Task(dp+滚动数组)
  6. Codeforces1045G
  7. 洛谷 动态规划一日游 P2577、P1070、P2051
  8. Redis进阶之内存模型
  9. 这些代码优化的方法,你都用过吗
  10. FileDescriptor的作用