자바스크립트에는 eval(str)이라는 함수가 있다. 이 함수는 문자열의 형태로 전달된 자바스크립트 코드를 실행시키는 일을 해준다. 예를 들어
var x = 3;
console.log(eval("1+2+x")); // 6
하지만 eval에는 중대한 문제가 있다...
공식문서에서는 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