eval(expr_str [, globals [, locals]])
- expr_sttr에 포함된 파이썬 표현식을 실행한다.

>>> a = 100
>>> eval = ('3 * a + 55')
    355


 다만 사용자에게 입력받은 문자열을 실행할 경우 잠재적으로 위험이 있다. 
실제로 해커들이 시스템을 다운시키기 위해 잘못된 값을 입력시킬수도 있고, 만약 입력된 값이 출력이 된다면 내부 변수값을 알아낼 수 도 있어 보안이 취약하다.

해답1. 심벌에 대한 접근 막기

>>> a = 100
>>> eval = ('3 * a + 55', {})  # 에러

- 글로벌 인수에 빈 딕셔너리를 넣어 심벌이 인식되지 못하게 만든다.

해답2. 딕셔너리를 사용하여 접근 제한

>>> from math import *
>>> a = 25
>>> dict = {'tan' : tan, 'radians' : radians, 'a' : a}
>>> eval('1000 * tan(radians(a))', dict)
	176.32

- radians, tan, a에 대한 접근만 제한적으로 허용

 

'Python > 공통이론' 카테고리의 다른 글

Python - 람다함수(일회용 함수)  (0) 2023.04.06
Python - functools  (0) 2023.04.06
Python - push pop 구현  (0) 2023.04.06
Python - enumerate 함수  (0) 2023.04.04
Python - 리스트의 복사  (0) 2023.04.04

+ Recent posts