Shopware 6部分资源URL使用deep link codes的原因是什么
Shopware 6在URL中使用deep link code的核心原因
你判断的方向是对的,加这层参数核心就是为了保障资源访问安全,绝非多余设计,具体的设计逻辑可以结合实际业务场景来看:
- 拆分业务标识和访问权限凭证
documentId是文档实体的数据库主键,本质是业务流转用的标识,会出现在非常多的场景里:后台管理接口的传参、和ERP/财务系统的对接数据、服务端运行日志、前端业务埋点记录里都会携带这个ID,传播范围完全不可控。如果只靠documentId做访问校验,只要ID在任意一个环节泄露,任何人都能直接打开对应单据,拿到客户手机号、收货地址、消费明细、交易金额这类敏感隐私信息。
deep link code是和单个实体绑定生成的高熵随机字符串,既不能从documentId反向推导,也不会作为普通业务字段在内部系统、第三方集成场景里流转,只会出现在专门给授权用户生成的访问链接里,相当于给每个需要对外暴露的私有资源单独配了独立的访问密钥。 - 兼顾免登访问的体验需求
/_action/document/{documentId}/{deepLinkCode}这个路由从设计之初就支持无登录态访问:最常见的场景就是商家给客户发发票通知邮件,直接把带code的链接附在邮件里,客户点一下就能下载对应发票,不需要特意登录店铺账号,也不需要走额外的验证流程,使用门槛很低。如果去掉deep link code,要么就得强制所有访问该接口的用户都登录做权限校验,普通客户查个发票还要反复登录,体验很差;要么就得彻底放开权限,承担敏感数据被随意爬取的风险。 - 堵上暴力遍历的安全漏洞
哪怕documentId用的是UUID,本身具备一定随机性,单独使用时依然存在风险:只要攻击者通过任意渠道拿到部分ID样本、或者摸清楚ID生成规则,就有可能通过遍历请求批量爬取所有单据。加上独立生成的deep link code之后,攻击者需要同时猜对两个完全无关联的高熵随机值才能拿到资源,暴力破解的成本会高到完全没有攻击价值。
额外说明:这套deep link code机制不是文档模块独有的实现,Shopware 6里的数字商品下载、订单免登查询、客户邀请链接等所有需要支持免登访问私有资源的场景,都用了相同的设计思路,核心就是在不引入复杂鉴权流程的前提下,避免私有资源被未授权访问。
内容的提问来源于stack exchange,提问作者Paweł Napierała
相关产品推荐
相关产品推荐

