티스토리 뷰
파이썬 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() 함수의 사용은 가급적 제한해야 한다.
'파이썬' 카테고리의 다른 글
[Python 파이썬] *args와 **kwargs 개념과 예제 (0) | 2024.05.16 |
---|---|
[Python 파이썬] 언패킹(unpacking) 개념과 예제 (0) | 2024.05.16 |
[Python 파이썬] 패킹(packing) 개념과 예제 (0) | 2024.05.15 |
[Python 파이썬] replace() 함수: '문자열 치환' (0) | 2024.05.15 |
[Python 파이썬] map 함수: '일괄 적용' (0) | 2024.05.15 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 11870
- Andrew Ng
- numpy 배열 생성
- Sort
- state value function
- 강화학습
- 앤드류응
- 딥러닝
- action value function
- **
- 강의노트 정리
- *
- *args
- 비용함수
- **kwargs
- numpy 배열 속성
- 로지스틱 회귀
- sorted
- NumPy
- baekjoon
- 파이썬
- 손실함수
- computation graph
- adrew ng 머신러닝 강의
- 숏코딩
- policy function
- omp: error #15
- 경사하강법
- 백준
- python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함