You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

日期验证函数误判部分XSS向量为合法值的问题排查与修复

isTimeSafe函数误判XSS向量为合法日期的原因及修复方案

问题原因

JavaScript的Date构造函数(依赖底层Date.parse())解析逻辑极度宽松:它会尝试从输入字符串中提取任何可识别的日期格式片段,哪怕字符串主体是XSS注入代码,只要其中包含能被解析为有效日期的内容(比如附带的标准日期串、零散数字被识别为时间戳等),就会生成合法的Date实例,导致isTimeSafe函数误返回true。

比如你提供的XSS向量中,若存在能被Date.parse()识别的日期片段,哪怕只是XSS代码的附属部分,都会触发误判。

修复方案

不能依赖Date的自动解析,必须先校验输入字符串是否符合预期的标准日期格式,再进行Date实例验证,彻底过滤无关内容。

示例修复代码

以下以校验ISO 8601格式(如2024-05-20、2024-05-20T14:30:00)为例:

const isTimeSafe = (value) => {
    // 仅接受字符串类型输入
    if (typeof value !== 'string') return false;

    // 匹配ISO 8601标准日期/日期时间格式
    const validDatePattern = /^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(.\d+)?(Z|[+-]\d{2}:\d{2})?)?$/;
    if (!validDatePattern.test(value)) return false;

    const datetime = new Date(value);
    // 额外验证:避免无效日期被自动修正(如"2024-02-30"会被转为"2024-03-01")
    return datetime.toISOString().startsWith(value.slice(0, 10));
}

修复逻辑说明

  1. 类型校验:先排除非字符串输入,避免其他类型触发的意外解析。
  2. 格式校验:用正则表达式严格匹配业务所需的日期格式,直接过滤掉包含XSS代码的非标准字符串。
  3. 二次验证:将解析后的日期转回字符串,与原输入的日期部分对比,避免Date自动修正非法日期(如无效月份、日期)的情况。

如果业务需要支持其他日期格式(如MM/DD/YYYY),只需修改正则表达式即可。

内容的提问来源于stack exchange,提问作者Zak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 13:11:14