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

Node.js+Express请求体非法字符检测:无法处理嵌套对象

解决嵌套对象的非法字符检测问题

没错,递归确实是处理任意层级嵌套数据的最优方案——你的原代码只遍历了顶层属性,遇到嵌套对象时只会把它转成字符串(比如"[object Object]"),根本不会检查内部的字段。我们只需要修改hasBadInput函数,让它遇到对象或数组时递归自身,就能覆盖所有嵌套层级了。

修改后的完整代码

var badStrings = ["'", '"', '<', '>'];

if (hasBadInput(req.body)) {
    // 检测到非法输入
    return res.status(400).send("BAD REQUEST");
}

function hasBadInput(requestParams) {
    // 处理数组:遍历每个元素检查
    if (Array.isArray(requestParams)) {
        for (const item of requestParams) {
            if (hasBadInput(item)) {
                return true;
            }
        }
        return false;
    }

    // 处理对象:遍历每个属性
    if (typeof requestParams === 'object' && requestParams !== null) {
        for (const key in requestParams) {
            if (Object.prototype.hasOwnProperty.call(requestParams, key)) {
                const value = requestParams[key];
                // 如果值是对象/数组,递归检查;否则直接检查是否包含非法字符
                if ((typeof value === 'object' && value !== null) || Array.isArray(value)) {
                    if (hasBadInput(value)) {
                        return true;
                    }
                } else if (value && isBadInput(value)) {
                    return true;
                }
            }
        }
        return false;
    }

    // 如果是原始类型,直接检查
    return requestParams && isBadInput(requestParams);
}

function isBadInput(value) {
    const strValue = String(value); // 统一转成字符串
    for (const badStr of badStrings) {
        if (strValue.includes(badStr)) {
            return true;
        }
    }
    return false;
}

关键改动说明

  • 数组处理:新增了Array.isArray的判断,确保数组里的每个元素(不管是原始值还是嵌套对象/数组)都被检查到
  • 递归逻辑:当遍历到的value是对象(且不是null)或数组时,递归调用hasBadInput,深入嵌套层级
  • 类型安全:增加了requestParams !== null的判断,避免把null误当成对象处理(因为typeof null === 'object')
  • 可读性优化:把value += ""改成String(value)更直观;用includes替代indexOf > -1,代码逻辑更清晰

这样修改后,不管你的req.body有多少层嵌套,甚至包含数组结构,所有字段都会被逐一检查非法字符,完全满足你的需求。而且正如你所说,这段代码只做检测不做 sanitize,完美适配你的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:29:52