web越权简介

ops/2024/12/26 3:05:42/

横向越权(Horizontal Privilege Escalation)和 纵向越权(Vertical Privilege Escalation)是常见的授权和访问控制漏洞。它们都涉及到用户对其不应该访问的资源或操作的访问。下面将详细解释这两种越权类型,并通过案例说明如何防止它们。


1. 横向越权(Horizontal Privilege Escalation)

横向越权是指攻击者能够访问或操作与自己权限相同级别的其他用户的数据或功能。攻击者通常通过操控 URL、参数或其他请求字段来伪造身份或访问他人的数据。

案例:横向越权

假设有一个在线购物系统,用户可以查看自己的订单。系统通过 URL 中的用户 ID 来查找订单信息。例如,用户的订单 URL 可能是:

https://example.com/orders/123

这里,123 是当前用户的订单 ID。一个合法用户访问自己的订单时,URL 会根据用户的身份生成并展示属于该用户的订单数据。

攻击方式:假设攻击者获取了其他用户的 ID(例如 124),并修改 URL:

https://example.com/orders/124

如果没有足够的访问控制和验证,系统可能会错误地返回 124 用户的订单数据,从而使攻击者能够查看或操作其他用户的订单。

防御手段:
  • 强制访问控制:在访问敏感数据时,不仅依赖 URL 中的参数,还应根据当前用户的身份进行验证。即使用户知道其他用户的 ID,也应进行权限检查。

    例如,系统应检查当前请求的用户是否有权限访问该 ID 对应的订单。

    def check_order_access(user_id, order_id):if user_id != order_id.owner_id:raise PermissionError("Access denied")
    
  • 使用会话和授权信息:确保通过用户登录信息(如会话、Token 等)对每个请求进行验证,不依赖 URL 或参数中的用户信息。

  • 最小化权限原则:每个用户只能访问自己拥有的数据或操作自己有权限的功能,避免无关用户的访问。


2. 纵向越权(Vertical Privilege Escalation)

纵向越权是指攻击者通过越权访问高级权限或管理员权限的功能,执行其没有授权的操作。攻击者通常会尝试将自己的权限提升为更高权限,如管理员或超级用户权限。

案例:纵向越权

假设有一个后台管理系统,用户可以修改自己的账户信息,如密码和个人资料。普通用户只能访问自己的账户,而管理员则可以访问所有用户的账户信息。

如果系统没有正确的权限控制,攻击者可能通过篡改请求参数,将普通用户的权限提升为管理员。

攻击方式:攻击者作为普通用户,发送如下请求来访问管理员页面:

GET https://example.com/admin/users/1

如果系统没有进行身份验证和权限控制,攻击者可能访问到 ID 为 1 的管理员账户信息。

防御手段:
  • 权限验证:在每个操作之前进行权限验证,确保用户只能执行其权限范围内的操作。例如,检查用户是否有权限访问其他用户或管理员的资源。

    def check_admin_access(user_role):if user_role != "admin":raise PermissionError("Access denied")
    
  • 最小权限原则:为每个用户分配最小权限,确保用户只能执行其角色所允许的操作。例如,普通用户只能修改自己的账户信息,管理员才能修改其他用户的信息。

  • 角色分离与访问控制:将用户分为不同角色(如普通用户、管理员等),并对每个角色定义严格的访问权限控制。

  • 安全的身份验证:使用强身份验证机制,确保用户请求中提供的身份信息合法且受到保护。

  • 使用 RBAC(角色基于访问控制):通过角色管理来限制用户只能访问其角色允许的资源。


对比:横向越权 vs 纵向越权

特性横向越权纵向越权
定义攻击者访问其他普通用户的数据或资源(同级别)攻击者访问比自己权限更高的功能或数据(提升权限)
攻击方式修改请求中的标识符(如用户 ID、订单 ID 等)来访问其他用户的数据通过绕过身份验证或篡改请求提升自己的权限
目标获取或操作其他用户的数据提升到管理员级别执行敏感操作
防御方法强制访问控制、验证当前用户权限、最小化权限权限验证、最小权限原则、角色分离、RBAC 等

总结

横向越权和纵向越权是 Web 安全中的两个重要漏洞,攻击者可以通过这两种方式访问未经授权的资源或操作敏感功能。要有效防御这两种漏洞,可以采取以下措施:

  1. 权限控制

    • 使用 细粒度权限控制,确保每个用户只能访问自己有权限的资源。
    • 对用户请求进行 角色验证,确保每个用户只执行与其角色相符的操作。
  2. 身份验证

    • 确保系统 验证用户身份,并且不会仅依赖 URL 或请求参数来识别用户。
    • 使用 会话Token安全机制,避免通过篡改请求绕过权限控制。
  3. 最小权限原则

    • 每个用户和服务只能获得最小的必要权限,避免权限过高导致攻击面扩大。

通过实施这些防御措施,能够有效防止横向越权和纵向越权漏洞的发生,提升 Web 应用的安全性。


http://www.ppmy.cn/ops/145010.html

相关文章

7. petalinux 根文件系统配置(package group)

根文件系统配置(Petalinux package group) 当使能某个软件包组的时候,依赖的包也会相应被使能,解决依赖问题,在配置页面的help选项可以查看需要安装的包 每个软件包组的功能: packagegroup-petalinux-audio包含与音…

探索 Python编程 调试案例:配置日志记录器查看程序运行bug

在 Python 编写程序的过程中,调试和日志查看是确保程序正确运行、快速定位错误以及理解程序执行流程的关键技能。无论是初学者还是经验丰富的开发者,都会在代码编写过程中遇到各种意想不到的问题,而有效的调试和程序运行日志记录能够大大提高…

光谱相机在农业的应用

一、作物生长监测1、营养状况评估 原理:不同的营养元素在植物体内的含量变化会导致植物叶片或其他组织的光谱反射率特性发生改变。例如,氮元素是植物叶绿素的重要组成部分,植物缺氮时,叶绿素含量下降,其在可见光波段&a…

【k8s】访问etcd

1. 配置 export.sh export ETCDCTL_API3 # Kubernetes 1.13 使用 API v3 export ETCDCTL_ENDPOINTShttps://[2023:145:246:270::3]:2379 # etcd API endpoint,通常为集群内的 etcd 服务地址 export ETCDCTL_CACERT/etc/kubernetes/certs/ca.crt # CA 证书文件 …

一文详解“二叉树中的深搜“在算法中的应用

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏: 递归、搜索与回溯算法专题 目录 深搜的介绍 2331.计算布尔二叉树的值 129.求根节点到叶节点数字之和 814.二叉树剪枝 98.验证二叉搜索树…

nginx(openresty) lua 解决对接其他平台,响应文件中地址跨域问题

location 添加配置 # location 添加的配置 # 作用:清空body体中的内,使得在lua处理响应体是,重新计算返回大小【如果不置空,它会保留原始响应体大小,导致处理数据的时候出现截断的问题】 header_filter_by_lua ngx.h…

Hive SQL 之 `LATERAL VIEW EXPLODE` 的正确打开方式

一文彻底搞懂 LATERAL VIEW EXPLODE 1. 引言 在处理复杂数据结构(如数组、映射)时,Hive SQL 提供了强大的功能来简化查询和数据分析。其中,LATERAL VIEW 和 EXPLODE 是两个特别有用的关键字,它们可以帮助我们将复杂的…

短视频运营行业该如何选择服务器?

在互联网快速发展的时代,短视频行业也应运而生,企业为了保证用户能够浏览流畅且稳定的短视频,则需要选择一台合适的服务器来运行相关业务,本文就来探讨一下短视频运营行业该如何选择服务器吧! 短视频行业一般需要处理大…