본문 바로가기
Language/Python

[python] String을 식으로 반환해주는 eval() 함수

by 카프리썬 2021. 6. 22.
728x90

eval(표현식)

매개변수로 받은 String형식의 expression(식)을 실행결과로 반환하는 함수 

즉, 하나이상의 값으로 표현될 수 있는 코드를 바로 값으로 반환해주는 함수이다. 

 

예를 들어 

eval("1+2") : 1+2 자체가 expression이지만 그 결과값인 3을 반환한다. 

eval("abs(-8)") : 절대값을 반환해주는 abs표현식의 결과인 8을 반환한다.  

 

보통 input()처럼 간단한 입출력을 실행할때, 문자열을 식으로 입력해서 해당식의 실행결과값을 반환할때 쓰인다. 

표현식이 문자열타입인데도 불구하고 eval()을 사용하면 그대로 연산값을 얻을 수 있는 편리함이 있다. 

x=eval(input("문자열을 입력하세요"))

print(x)  //입력한 문자

 

하지만,  사용자가 마음대로 프로그램을 조종할 수 있는 자유스러움때문에 eval()사용을 조심해야한다. 

이 말은 프로그램을 해킹 할 수 있다는 뜻이기 때문 

 

 eval()함수는 해당표현식을 그대로 실행하는 것이기 떄문에 root 디렉토리의 정보가 그대로 노출되는 등 

command injection flaws를 그대로 노출할 수 있다. 

이는 시스템 명령을 삽입할 수 있는 스크립트언어(php,javascript 등 ) 모두 가지고 있는 취약점 

 

eval()은 정수, 실수 다 입력해도 되니까,  차라리 정확하게 타입으로 형변환시키는걸 권장한다. 

 

 

출처 

https://blockdmask.tistory.com/437

https://bluese05.tistory.com/64

https://velog.io/@mickeyshoes/Python-eval-%ED%95%A8%EC%88%98%EB%A5%BC-%EC%95%84%EC%8B%9C%EB%82%98%EC%9A%94

반응형