Skip to content
← Back to rules

eslint/no-eval 정확성

This rule is turned on by default.

작동 방식

eval 함수에 대한 참조를 금지합니다. 이 규칙은 eval() 함수의 사용을 금지함으로써 잠재적으로 위험하고 불필요하며 느린 코드를 방지하기 위한 것입니다.

왜 좋지 않은가?

자바스크립트의 eval() 함수는 잠재적으로 위험하며 종종 오용됩니다. 신뢰할 수 없는 코드에 대해 eval()을 사용하면 여러 가지 주입 공격에 프로그램이 노출될 수 있습니다. 대부분의 상황에서 eval() 사용은 JSON.parse() 또는 더 안전한 방법으로 Function 생성자를 사용하는 등 보다 나은 대안을 통해 문제를 해결할 수 있습니다.

예시

이 규칙에 부적절한 코드 예시:

js
const obj = { x: "foo" },
  key = "x",
  value = eval("obj." + key);

(0, eval)("const a = 0");

const foo = eval;
foo("const a = 0");

this.eval("const a = 0");

이 규칙에 적절한 코드 예시:

js
const obj = { x: "foo" },
  key = "x",
  value = obj[key];

class A {
  foo() {
    this.eval("const a = 0");
  }

  eval() {}

  static {
    this.eval("const a = 0");
  }

  static eval() {}
}

구성

이 규칙은 다음 속성을 가진 구성 객체를 수용합니다.

allowIndirect

type: boolean

기본값: true

allowIndirect 옵션은 간접적인 eval() 호출을 허용합니다.

간접적인 eval() 호출(예: window['eval'])은 직접 호출보다 덜 위험합니다. 왜냐하면 동적으로 스코프를 변경할 수 없기 때문이며, 일반적으로 직접 호출에 비해 성능에 미치는 영향도 적습니다. 간접 호출은 자바스크립트의 스코프 체인을 호출하지 않기 때문입니다.

사용 방법

이 규칙을 설정 파일 또는 명령줄 인터페이스에서 활성화하려면 다음을 사용할 수 있습니다:

json
{
  "rules": {
    "no-eval": "error"
  }
}
bash
oxlint --deny no-eval

참고 자료