Escape regex metacharacters in siteApiNamespace before interpolating into RegExp

未关闭
#368 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

评估

难度
2/5
预计耗时
1-3 小时
新手友好度
55/100
Issue 类型
缺陷
描述清晰度
描述清楚
活跃度
停滞
技术栈
javascript
领域
mobile-dev

调研方向

从 src/utils/api-fetch.js 中的 apiPathModifierMiddleware 开始,然后检查 src/utils/api-fetch.test.js 中相关的用例。验证包含正则表达式元字符的 namespace 是否按字面匹配,并确认现有测试仍然通过;如有需要,为报告中的 namespace 示例增加覆盖。

由索引模型根据 Issue 内容生成。

描述

Summary

In src/utils/api-fetch.js, apiPathModifierMiddleware interpolates siteApiNamespace values directly into new RegExp() without escaping regex metacharacters:

const namespaceRegex = new RegExp( `(${ siteApiNamespace.join( '|' ) })` );

If a namespace contained characters like ., +, (, ), *, etc., they would be interpreted as regex syntax rather than matched literally.

Risk

Low — siteApiNamespace comes from the native app bridge config (not user input), so exploitation requires a compromised host app. But it's a latent correctness bug: a namespace like wp/v2.1 would match wp/v2X (. matches any character).

Suggested fix

Escape each namespace before joining:

const escaped = siteApiNamespace.map( ( ns ) =>
    ns.replace( /[.*+?^${}()|[\]\\]/g, '\\$&' )
);
const namespaceRegex = new RegExp( `(${ escaped.join( '|' ) })` );

Existing tests in src/utils/api-fetch.test.js pass with this change.

Found during adversarial code review of #TBD.

主要语言
JavaScript
星标
29
派生
7
平均合并
2 天 11 小时
30 天内合并 PR
81

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

wordpress-mobile/GutenbergKit 的其他 Issue

查看 wordpress-mobile/GutenbergKit 的全部 Issue

相似的 Issue

更多 JavaScript Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。