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

如何解决ESLint的security/detect-object-injection错误且不禁用ESLint

解决ESLint的security/detect-object-injection错误(无需禁用规则)

错误原因

security/detect-object-injection规则的核心是防范对象注入攻击:当你使用动态变量作为对象键访问属性时,ESLint会默认认为存在风险——比如变量被篡改后,可能意外访问到对象原型链上的属性(如__proto__、constructor),引发安全问题或异常行为。

即便你用TypeScript的CardName类型做了约束,ESLint的这个规则可能无法识别类型检查的保障,依然会触发警告。

解决方法

方法1:先校验键的合法性

在访问对象属性前,先确认传入的cardName是mappedCards的合法键,ESLint会识别到这个安全校验,不再报错:

const getMappedCard = (cardName: CardName) => {
  const mappedCards = {
    Mastercard: <Mastercard />,
    Visa: <Visa />,
    Hiper: <Hiper />,
    Amex: <Amex />,
    Hipercard: <Hipercard />,
    Elo: <Elo />,
    Jcb: <Jcb />,
    Diners: <Diners />,
  };

  if (Object.keys(mappedCards).includes(cardName)) {
    return mappedCards[cardName as keyof typeof mappedCards] ?? <div>erro</div>;
  }
  return <div>erro</div>;
};

这里的类型断言as keyof typeof mappedCards是让TypeScript明确cardName属于合法键集合,避免类型报错。

方法2:用Map替代普通对象

Map的键值对机制不会涉及原型链访问,ESLint的security/detect-object-injection规则不会对Map的get方法触发警告:

const getMappedCard = (cardName: CardName) => {
  const mappedCards = new Map([
    ['Mastercard', <Mastercard />],
    ['Visa', <Visa />],
    ['Hiper', <Hiper />],
    ['Amex', <Amex />],
    ['Hipercard', <Hipercard />],
    ['Elo', <Elo />],
    ['Jcb', <Jcb />],
    ['Diners', <Diners />],
  ]);

  return mappedCards.get(cardName) ?? <div>erro</div>;
};

方法3:显式绑定键类型(结合校验更稳妥)

如果你的CardName类型本来就是mappedCards的键集合,可直接在函数参数里显式声明类型,再配合存在性校验,同时满足TypeScript类型检查和ESLint安全规则:

const getMappedCard = (cardName: keyof typeof mappedCards) => {
  const mappedCards = {
    Mastercard: <Mastercard />,
    Visa: <Visa />,
    Hiper: <Hiper />,
    Amex: <Amex />,
    Hipercard: <Hipercard />,
    Elo: <Elo />,
    Jcb: <Jcb />,
    Diners: <Diners />,
  };

  return Object.prototype.hasOwnProperty.call(mappedCards, cardName) 
    ? mappedCards[cardName] 
    : <div>erro</div>;
};

用hasOwnProperty校验能更精准地判断属性是否属于对象自身,避免原型链属性的干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 11:50:22