eslint/no-prototype-builtins 조심스러운
어떤 기능을 하나요
객체에서 일부 Object.prototype 메서드를 직접 호출하는 것을 금지합니다
왜 나쁜가요?
ECMAScript 5.1에서 Object.create가 추가되면서, 지정된 [[Prototype]]을 가진 객체를 생성할 수 있게 되었습니다.Object.create(null)은 Map으로 사용될 객체를 생성하는 데 흔히 사용되는 패턴입니다.
이러한 경우 객체가 Object.prototype의 속성을 가진다고 가정하면 오류가 발생할 수 있습니다.
이 규칙은 객체에서 일부 Object.prototype 메서드를 직접 호출하는 것을 방지합니다.
또한, 객체는 Object.prototype의 내장 메서드를 가릴 수 있는 속성을 가질 수 있으며, 이로 인해 예기치 않은 동작이나 서비스 거부형 보안 취약점이 발생할 수 있습니다.
예를 들어, 웹 서버가 클라이언트로부터 받은 JSON 입력을 파싱하고 결과 객체에 대해 hasOwnProperty를 직접 호출한다면 안전하지 않습니다. 악의적인 클라이언트가 {"hasOwnProperty": 1}과 같은 값으로 요청을 보내면 서버가 크래시될 수 있기 때문입니다.
이러한 미묘한 버그를 피하기 위해, 항상 이러한 메서드를 Object.prototype에서 호출하는 것이 좋습니다. 예를 들어, foo.hasOwnProperty("bar")는 Object.prototype.hasOwnProperty.call(foo, "bar")로 대체되어야 합니다.
예제
이 규칙에 위반되는 잘못된 코드 예제:
var hasBarProperty = foo.hasOwnProperty("bar");
var isPrototypeOfBar = foo.isPrototypeOf(bar);
var barIsEnumerable = foo.propertyIsEnumerable("bar");사용 방법
이 규칙을 구성 파일 또는 명령줄 인터페이스를 통해 활성화하려면 다음을 사용하세요:
{
"rules": {
"no-prototype-builtins": "error"
}
}oxlint --deny no-prototype-builtins