eval

덤프버전 :




1. 개요
2. 상세
3. eval() is evil
4. 여담


1. 개요[편집]


일부 프로그래밍 언어들에서 지원하는 함수의 일종. 문자열로 된 표현식을 받아 코드로 해석하여 실행하는 역할을 한다. evaluate의 약자로, 문자열이 코드라고 가정하고 평가해서 실행한다는 의미다.

비슷한 함수로
exec
등이 있다.


2. 상세[편집]


eval(expression)
의 형태로 쓸 수 있다.

일반적으로 코드를 동적으로 실행하기 위해 쓰인다. C언어 같은 컴파일러 언어에서는 지원하지 않고 Perl, JavaScript, Python 같은 스크립트 언어에 존재한다. 사용자가 입력하는 값이나 프로그램이 작동하면서 변하는 값을 문자열의 형태로 반영하여 실행할 수 있기 때문에 간편하다.

실행되는 모습을 보고 싶다면 F12 키를 눌러 자바스크립트 콘솔을 열고,
e = 1
eval('2 + e')

라고 타이핑해보자. 당신이 두번째 줄의 인자로 입력한 것은 분명히 문자열이지만 정수 2와 변수 e 즉 정수 1을 더하여 3이 출력될 것이다.


3. eval() is evil[편집]


그러나
eval
의 사용은 많은 경우에 금기시된다. 치명적인 보안 위험이 있기 때문이다. GOTO문의 경우보다도 위험한데, GOTO는 아무리 잘못 써 봤자 그 코드를 다시 편집할 수 없게 만드는 정도에서 그치는 반면
eval
문을 잘못 사용하는 경우, 예를 들면 네트워크 상에서 가져온 문자열을 실행하는 경우 악의적으로 표현식을 작성한 사람에 의해 모든 너 데이터 다 내거다요 등의 사태가 일어날 수 있기 때문이다.

eval
만으로 동적 실행을 하지 않으려고 하면 보안 위험이 적은 대체품은 얼마든지 있다. 일반적인 경우에는 동적으로 변수 등을 정해주는 함수, Python이라면
setattr
를 사용하면 될 일이지
eval
까지 사용할 이유는 없다.


4. 여담[편집]


나무위키Cloudflare를 사용하기 때문에 https://namu.wiki/w/eval()에 들어가면 코드 인젝션으로 판단되어 차단되었다고 뜬 적이 있다.
파일:크리에이티브 커먼즈 라이선스__CC.png 이 문서의 내용 중 전체 또는 일부는 2023-11-06 02:24:38에 나무위키 eval 문서에서 가져왔습니다.