ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Appium Insecure Features 安全机制解析:服务端不安全特性的启用、过滤与精确管控

Appium Insecure Features 安全机制解析:服务端不安全特性的启用、过滤与精确管控 Appium Insecure Features 安全机制解析服务端不安全特性的启用、过滤与精确管控【免费下载链接】appiumCross-platform automation framework for all kinds of apps, built on top of the W3C WebDriver protocol项目地址: https://gitcode.com/GitHub_Trending/ap/appiumAppium 服务端内置了一套安全保护机制所有潜在不安全的特性默认关闭需要由服务端主机显式放行才能使用。本文以官方 CLI 参考文档 insecure-features.md 为核心结合源码实现完整梳理三个安全开关参数--relaxed-security、--allow-insecure、--deny-insecure的语义、特性命名规范automationName:feature、服务端内置特性与官方插件特性清单并深入到 insecure-features.ts 与 core.ts 中讲清楚这些特性从命令行解析、校验、过滤、下发到最终判定启用的完整调用链。读完本文你将掌握如何按 driver 粒度精确启用/禁用某个不安全特性、如何使用通配符*一次性放行所有特性、如何用配置文件和命令行协同管理安全开关以及驱动/插件作者如何定义并对外发布自己的不安全特性。一、为什么要引入Insecure Features机制Appium 是一个跨平台自动化框架常被部署在共享服务器或多租户环境中。为了保障服务端安全安全指南 建议所有部署满足以下前提在自己的本机或受保护的内网中运行 Appium 服务不与他人共享不可信的服务实例不将 Appium 的端口暴露到公网。即便如此仍有一些功能天然带有安全风险例如允许客户端查看所有会话信息、批量执行多条命令等因此Appium 默认禁用所有不安全特性必须由服务端主机显式开启。这里有一个关键约束客户端会话无权修改这些设置只有服务端主机可以通过启动参数或配置文件控制。本文所讲的 insecure-features.md 正是这份机制的官方特性清单它列出了服务端级别定义的特性以及官方插件定义的特性。二、三个核心安全开关参数安全开关通过 Appium Server 启动参数 或 配置文件 传入。服务端相关参数共三个参数说明--relaxed-security开启全部不安全特性但会被--deny-insecure明确阻止的特性除外--allow-insecure只开启指定的特性同样受--deny-insecure约束与--relaxed-security同时使用时不生效--deny-insecure显式关闭指定特性优先级高于--relaxed-security与--allow-insecure从 server.md 的参数表可以看到默认值--allow-insecure与--deny-insecure均为arraystring类型、默认[]--relaxed-security为boolean、默认false。命令行传入的值会覆盖配置文件中的同名项。这三个参数的语义在 insecure-features.ts 的configureGlobalFeatures中得到了印证若relaxedSecurityEnabled为真则记录日志Enabling relaxed security. All insecure features will be enabled unless explicitly disabled by --deny-insecure并将标志写入驱动实例否则若allowInsecure非空先通过validateFeatures校验再调用filterInsecureFeatures过滤出作用于全部驱动通配符*的全局特性并逐条打印最后处理denyInsecure同样校验、过滤并打印被显式禁用的全局特性。特性命名规范automationName:feature传入--allow-insecure/--deny-insecure的特性必须以逗号分隔列表形式给出且每个特性必须带前缀指明该特性应用于哪个驱动前缀可以是驱动driver的automationName表示仅对该驱动的会话生效前缀也可以是通配符*表示对所有驱动生效前缀与特性名之间使用冒号:分隔。例如first:foo表示first驱动上的foo特性*:bar表示所有驱动上的bar特性。这一规范在 insecure-features.ts 的validateFeatures中有硬性校验FEATURE_NAME_SEPARATOR :如果完整特性名中找不到冒号、或冒号两侧automationName 与 featureName任一侧为空都会抛出错误The full feature name must include both the destination automation name or the * wildcard to apply the feature to all installed drivers, and the feature name split by a colon.对应的单元测试位于 parser.spec.ts验证了--allow-insecure *:foo、--allow-insecure *:foo,*:bar以及带空格*:foo ,*:bar等写法都能被正确解析为数组。三、服务端定义的不安全特性清单insecure-features.md 明确指出以下特性定义在server 级别即使没有任何驱动也能使用但只能用通配符*前缀启用——因为它们不隶属于某个具体驱动特性名说明session_discovery允许通过GET /appium/sessions获取服务端当前活跃会话的列表也就是说想要开启该特性需要这样启动服务端appium --allow-insecure*:session_discovery由于该特性不属于任何驱动使用具体驱动的automationName前缀例如uiautomator2:session_discovery将无法匹配到它这正是文档强调只能使用通配符前缀的原因。官方插件定义的不安全特性驱动和插件可以自由定义属于自己的不安全特性。官方插件定义的特性如下特性名所属插件说明execute_driver_scriptexecute_driver允许发送包含多条 Appium 命令的单个请求对应地启用方式是appium --use-pluginsexecute-driver --allow-insecure*:execute_driver_script注意插件特性同样需要在插件被启用--use-plugins的前提下才会被解析并执行其处理逻辑。此外绝大多数不安全特性都由驱动或插件自行定义因此实际使用时应以对应驱动/插件的文档为准查看它们支持的特性名。四、实操示例按驱动粒度精确放行下面一组示例完整覆盖了三种开关组合的典型用法示例取自 security.md 的 Examples 小节。仅为first驱动开启foo特性appium --allow-insecurefirst:foo为所有驱动开启foo特性appium --allow-insecure*:foo为所有驱动开启foo但first驱动除外appium --allow-insecure*:foo --deny-insecurefirst:foo为所有驱动开启全部特性但排除fooappium --relaxed-security --deny-insecure*:foo为多个驱动分别开启不同特性appium --allow-insecureuiautomator2:adb_shell,xcuitest:get_server_logs注意最后一条示例的细节多个特性用逗号分隔每个特性都带各自驱动的automationName前缀如uiautomator2:adb_shell、xcuitest:get_server_logs实现不同驱动放行不同能力的精确管控。五、底层原理特性配置的解析、过滤与判定要真正理解这些开关的行为需要看三处关键源码。1. 命令行解析--allow-insecure与--deny-insecure在 CLI 层被解析为字符串数组。测试 parser.spec.ts 显示逗号分隔的列表无论是否带空格会被拆分为多个独立条目空字符串解析为空数组。这保证了诸如*:foo,*:bar这样的紧凑写法与*:foo ,*:bar的松散写法行为一致。2. 服务端校验与按驱动过滤服务端启动时appium.ts 将configureGlobalFeatures与configureDriverFeatures挂载到 AppiumDriver 实例上configureGlobalFeatures insecureFeatures.configureGlobalFeatures; configureDriverFeatures insecureFeatures.configureDriverFeatures;configureGlobalFeaturesinsecure-features.ts处理--relaxed-security全局开关以及校验、过滤并打印全局*前缀的 allow/deny 列表configureDriverFeaturesinsecure-features.ts在创建每个会话、实例化驱动时被调用见 appium.ts将服务端配置中匹配该驱动的特性写入驱动实例的allowInsecure/denyInsecure/relaxedSecurityEnabled字段。过滤逻辑insecure-features.ts判断每个完整特性名的 automationName 部分是否为当前 driverName 或*通配符匹配才下发。3. 驱动的运行时判定驱动基类 core.ts 定义了三个字段默认值分别为relaxedSecurityEnabled: false、allowInsecure: []、denyInsecure: []。真正判定某个特性是否启用的是isFeatureEnabled(name)core.ts其判定顺序体现了三个参数的优先级设计先查denyInsecure——只要命中automationName 匹配当前驱动或*且特性名一致直接返回false拒绝再查allowInsecure——命中则返回true放行若都未命中且relaxedSecurityEnabled为真则返回true兜底放行全部否则返回false。从源码看automationName 的比较是大小写不敏感的统一toLowerCase()而特性名比较是大小写敏感的。assertFeatureEnabledcore.ts则是对外抛错入口当某功能调用方请求一个未启用的特性时会抛出包含特性名与安全文档指引的错误信息。4. 优先级关系小结综合以上实现先 deny、再 allow、最后 relaxed 兜底的顺序意味着--deny-insecure的优先级最高可覆盖--relaxed-security与--allow-insecure而--allow-insecure与--relaxed-security同时出现时configureGlobalFeatures中else if分支保证 allow 列表不生效即文档所述--allow-insecure在--relaxed-security组合下无效果。六、通过配置文件管理不安全特性所有三个开关都可以写入 Appium 配置文件适合需要长期稳定复用的部署场景。参考仓库中的 appium.config.sample.yamlserver: allow-insecure: - foo - bar deny-insecure: - baz - quux relaxed-security: false对应的 JSON 写法可参考 appium.config.sample.json其中allow-insecure/deny-insecure同样以字符串数组形式给出。配置文件里这些项与命令行参数一一对应命令行传入的值会覆盖配置文件中的值。仓库测试目录中还有多种配置形态的 fixtures如 appium-config-security-delimited.json、appium-config-security-array.json、appium-config-security-path.json用于验证安全参数在不同配置表达方式下的解析行为。七、给驱动/插件开发者的实现指引本文档最后还隐含了一条对开发者开放的能力Appium 驱动和插件可以自由定义属于自己的不安全特性。对于想实现自定义特性的作者官方指引位于 Building Drivers 文档中的服务端分配的驱动属性与安全标志一节。实现要点可结合前文源码归纳为在驱动/插件中声明特性名并在相应命令执行前调用assertFeatureEnabled(featureName)做开关校验特性最终是否放行取决于服务端通过configureDriverFeatures下发的allowInsecure/denyInsecure/relaxedSecurityEnabled三组标志在驱动/插件文档中明确公布特性名与对应的automationName前缀方便用户按automationName:feature规范配置。结语Appium 的 insecure features 机制是一套默认拒绝、按名放行、逐级覆盖的安全模型session_discovery等服务端内置特性与execute_driver_script等插件特性全部默认关闭服务端主机通过--relaxed-security全开、--allow-insecure精确开、--deny-insecure精确关三个开关、配合automationName:feature或*:feature命名规范实现细粒度管控。从 insecure-features.ts 的校验过滤到 core.ts 的运行时判定deny 优先、allow 次之、relaxed 兜底的优先级始终贯穿全链路。实际部署时请务必结合自身网络环境评估风险优先使用--allow-insecure按需放行仅在完全可信的内网环境中才考虑--relaxed-security。【免费下载链接】appiumCross-platform automation framework for all kinds of apps, built on top of the W3C WebDriver protocol项目地址: https://gitcode.com/GitHub_Trending/ap/appium创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表