악마의 함수 eval()

mia·2023년 4월 17일
0

내가 왜 이 함수를 알게 되었는가..

프로그래머스를 푸는데 문자열로 된 식을 계산하는 문제가 나왔다.
도저히 내 머리로는 풀 수 없어서 구글의 도움을 받았는데 그때 나오게 된 것이 바로 eval() 메서드였다.
함수는 다음과 같이 동작한다.

// 문자열을 자바스크립트 코드로 변환 시켜준다.

const my_string = "3 - 4";
const cal = eval(my_string);
console.log(cal); // -1

MDN 사이트에서는 이렇게 간편한 함수를 절!대! 사용하지 말라고 한다..

왜 사용하지 말아야 하는 걸까..?

eval()은 인자로 전달 받은 코드를 억지로 실행시킨다. 따라서 누군가(해커 또는 악의 무리들)가 악영향을 줄수 있는 문자열을 eval()메서드로 실행한다면, 우리의 웹페이지나 확장 프로그램의 권한으로 사용자의 기기에서 악의적인 코드를 수행하는 결과가 발생할 수 있다. 또한 eval()이 호출된 위치의 스코프를 볼 수 있어 공격당하기 좋다.
추가적으로 JS 인터프리터(번역기)를 사용해야하기 때문에 느리다고 한다.

그럼 대안은..?

new Function()을 사용하면 된다.

// 매개변수와 함수 정의를 문자열로 받는다
new Function (매개변수1, 매개변수2, ... , 함수 정의)

그렇다면 악의 구렁텅이로 빠지지말고 안전하게 코딩하자..!

profile
노 포기 킾고잉

0개의 댓글