通过GraphQL公开的客户组名称、区段和促销规则信息
本文提供了一个修补程序,用于防止客户组名称、客户区段和促销规则信息通过GraphQL泄露。 Adobe Commerce 2.4.8-p1中计划修复此问题。
描述 description
受影响的产品和版本
为Adobe Commerce版本创建了修补程序:
- Adobe Commerce(所有部署方法) 2.4.8
与Adobe Commerce版本兼容:
- Adobe Commerce(所有部署方法) 2.4.8
问题
对于Storefront Personalization插件,我们引入了一个新的GraphQL突变,用于显示客户组名称、区段、购物车和目录规则等基本信息。 但是,如果名称中包含敏感数据(如优惠详细信息或优惠券代码),则可能会泄露。
重现问题的步骤
案例I:目录规则
-
在 管理员 侧边栏上,转到 营销
>
目录价格规则>
添加新规则。 -
定义规则条件(例如,产品属性或类别)。
-
保存并应用规则。
-
确保产品符合规则条件。
-
运行以下GraphQL查询以获取所有规则:
code language-none query { allCatalogRules { name } }
-
查询产品以验证规则是否适用:
code language-none query { products(filter: { sku: { eq: "product-sku" } }) { items { name rules { name } } } }
案例II:购物车规则
-
在 管理员 侧边栏上,转到 营销
>
购物车价格规则>
添加新规则。 -
设置条件,如最小购物车值和客户组。
-
保存并应用规则。
-
将产品添加到购物车以触发规则。
-
使用GraphQL验证所有购物车规则:
code language-none query { allCartRules { name } }
-
检查规则是否已应用于活动的购物车:
code language-none query { cart(cart_id: "your-cart-id") { rules { name } } }
案例III:客户组
-
在 管理员 侧边栏上,转到 客户
>
客户组。 -
验证预期的组是否存在。
-
使用 GraphQL 获取所有组:
code language-none query { allCustomerGroups { name } }
-
验证客户/来宾的组:
code language-none query { customerGroup { name } }
案例IV:客户区段(仅适用于Adobe Commerce)
-
在 管理员 侧边栏上,转到 客户
>
客户区段>
添加区段。 -
定义基于客户的条件(例如,订单、购物车内容)。
-
分配适用的范围: 访客、已注册,或同时分配两者。
-
确保条件与测试客户匹配。
-
使用GraphQL检查所有区段:
code language-none query { allCustomerSegments { name apply_to } }
-
验证应用于购物车的区段:
code language-none query { customerSegments(cartId: "your-cart-id") { name } }
预期的结果:
客户组、区段的名称和促销规则信息不通过GraphQL公开。
实际结果:
客户组、区段的名称和促销规则信息可通过GraphQL公开。
解决方法 resolution
根据您的Adobe Commerce版本应用附加的修补程序:
-
对于Adobe Commerce版本2.4.8:
-
对于Magento Open Source版本2.4.8: