자바스크립트 그리고 eval

지드루·2022년 5월 14일
0

Javascript

목록 보기
2/5

서론

자바스크립트에는 eval(str)이라는 함수가 있다. 이 함수는 문자열의 형태로 전달된 자바스크립트 코드를 실행시키는 일을 해준다. 예를 들어

	var x = 3;
	console.log(eval("1+2+x")); // 6

하지만 eval에는 중대한 문제가 있다...

eval is evil

공식문서에서는 eval의 사용을 지양할것을 권장하고있다!

eval은 그 자체로 많은 위험성을 내포하고 있다.

성능문제

우선 성능측면에서 문제점이 있다. eval함수에 전달된 코드들은 동적으로 해석되게 되는데, 이는 eval에 어떤 문자열이 올것인지 알 수 없다는 것을 의미한다. 자바스크립트 엔진은 이를 미리 컴파일 할 수 없으며, 런타임단계에서 다시 컴파일 하게된다. 이는 즉eval함수가 렉시컬 스코프를 수정하기 때문인데, eval함수가 실행되면 자바스크립트는 렉시컬 스코프를 다시 계산하게 되고, 이는 성능적인 측면에서 불리한 점이 될 수 밖에 없다.

보안문제

문자열로 전달된 자바스크립트 코드를 실행한다는 부분에서 알 수 있겠지만, eval함수 자체가 치명적인 보안문제를 내포하고있다. web 보안에 익숙한 해커가 악의적인 코드를 넣을 가능성도 있으며, 기존 코드를 오염시킬 가능성도 있다.

결론

대부분의 상황에서는 eval을 쓰지 않는것이 권장되며, 써야한다고 하더라도 또 대부분의 상황에서는 eval대신 function을 쓰는것이 권장된다. 하지만 필요한 순간이 올 수도 있다. 꼭 써야한다면 반드시 eval의 취약점과 여러 활용패턴에 대해 충분히 숙지하고 써야만 할 것이다.

참조 : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/eval
https://developer-talk.tistory.com/271
https://webclub.tistory.com/512

0개의 댓글