티스토리 뷰

파이썬 eval() 함에 대한 사용법과 개념 그리고 예제에 대해서 알아보려고 한다.

 

<목차>
 - eval() 함수 개념 및 기본 설명
 - eval() 함수 예제
 - eval() 함수의 취약점

 


eval() 함수 개념 및 기본 설명

eval(expression)

eval(일반적인 사칙연산 '식')

 

eval 함수는 문자열로 표현되는 expression(식)을 실행한 후 결과를 반환하는 함수이다. 

 

그럼 expression(식)이란? [공식문서]

식은 값, 연산자, 변수 등을 사용하여 파이썬에서 무언가를 표현할 수 있는 것을 의미한다.

연산자들 <, >, +, -, 반복문 for, while, 그리고 값 1,2,3 등을 가지고 만들면 그게 식이다.

  • a>b 이런것도 식이다.
  • 1+2 이런것도 식이다.
  • 1 자체도 식이다.

eval() 함수 예제

# 숫자 덧셈
a= eval('1+2')
print(a) # 3

# 내장 함수 abs
b= eval('abs(-30)')
print(b) # 30

# 숫자 덧셈
c = eval('len([1,2,3,4,5])')
print(c) # 5

# 문자열 덧셈
d = eval('"hello"+"world"')
print(d) # helloworld

# 비교
e = eval('1>5')
print(e) # False
# input 이용한 eval 함수
def Q1():
    a=eval(input("how old are you? "))
    a=a+1
    print("age:",a)
    
def main():
    Q1()
main()

> 30을 입력하면, 31이 나온다.


eval() 함수의 보안 취약점

eval() 함수는 input 함수를 이용해서 사용자로부터 입력 받거나 식을 입력받아서 마음대로 프로그램을 조종할 수 있다. 
즉, 사용자가 마음대로 프로그램을 조종할 수 있어 프로그램을 조작할수 있다.

 

def Q1():
    return 30

def Q2():
    a=eval(input("입력해주세요! "))
    print(a)

def main():
    Q2()
main()

 

위와 같은 코드를 다음과 같이 실행하였을 때, (input에 Q1()을 넣음)

 

30이라는 결과를 받는다.

 

Q1() 을 입력했을 때 eval함수에는 문자열 "Q1()"이 전달되었고,

eval 함수는 이 내용을 분석해서 프로그래머가 Q1 함수 호출을 명령하지 않았음에도 불구하고 Q1함수를 호출한 것이다.

 

이처럼 원하지 않는 동작이 발생할 수도 있다. 이는 프로그램 안전성을 해칠 수 있으며, 심지어 보안 문제로 이어질 수 있다. 따라서 보안 상의 이유로 eval() 함수의 사용은 가급적 제한해야 한다.

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함