728x90
- 연산식을 계산하기 위해 eval()을 호출하지 말 것
- 문자열로부터 eval()을 실행하는 것은 엄청나게 위험함. eval()을 사용하면 해커가 위험한 코드를 사용할 수 있다.
- eval()은 인자로 받은 코드를 caller의 권한으로 수행하는 위험한 함수
- 또한, 최신 JS엔진에서 여러 코드 구조를 최적화 하는 것과 달리 eval()은 JS인터프리터를 사용해야 하기 때문에 다른 대안들보다 느리다.
- 최신 JavaScript 인터프리터는 자바스크립트를 기계 코드로 변환한다. 즉, 변수명의 개념이 완전히 없어진다.
- 그러나 eval을 사용하면 브라우저는 기계 코드에 해당 변수가 있는지 확인하고 값을 대입하기 위해 길고 무거운 변수명 검색을 수행해야 한다.
- 또한 eval()을 통해 자료형 변경 등 변수에 변화가 일어날 수 있으며, 브라우저는 이에 대응하기 위해 기계 코드를 재작성해야 한다.
- eval()대신 window.Function이라는 대안을 사용해보자
//eval 을 사용하는 나쁜 코드
function looseJsonParse(obj) {
return eval(obj);
}
console.log(looseJsonParse(
"{a:(4-1), b:function(){}, c:new Date()}"
))
//eval이 없는 코드
function looseJsonParse(obj){
return Function('"use strict"; return (' + obj + ')')();
}
console.log(looseJsonParse(
"{a:(4-1), b:function(){}, c:new Date()}"
))
출처: https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/eval
eval() - JavaScript | MDN
**eval()**은 문자로 표현된 JavaScript 코드를 실행하는 함수입니다.
developer.mozilla.org
728x90
'△ > SecureCoding' 카테고리의 다른 글
SQL 삽입 공격 : Hibernate (0) | 2023.02.01 |
---|---|
안전하지 않은 리플렉션 (2) | 2023.02.01 |
적절한 인증 없는 중요기능 허용 (0) | 2022.11.21 |
무결성 점검 없는 코드 다운로드 (0) | 2022.11.21 |
프로세스 제어 (0) | 2022.11.18 |
댓글