원래 문제:
사용자에 대해 eval() 사용 -제공된 입력은 위험할 수 있습니다. ast 모듈의 .literal_eval()은 어떻게 더 안전한 대안을 제공할 수 있나요?
Eval 함수:
eval() 함수는 Python 문을 평가합니다. 입력은 Python 코드가 포함된 문자열일 수 있으며 eval()은 해당 코드 실행 결과를 반환합니다.
Eval의 위험:
그러나 eval()은 의도하지 않은 코드라도 임의의 코드를 실행할 가능성이 있으므로 위험합니다. 예를 들어, 사용자가 다음과 같은 입력을 제공하면
eval("import os; os.system('rm -rf *')")
현재 디렉터리의 모든 파일을 삭제하는 명령이 실행됩니다.
리터럴 평가 사용:
eval()과 달리 ast.literal_eval() 함수는 숫자 리터럴, 문자열, 부울 및 사전. 이렇게 하면 임의의 코드를 실행하지 않으므로 사용자가 제공한 데이터를 처리하는 것이 훨씬 더 안전해집니다. 예를 들어, 제공된 코드에서
datamap = ast.literal_eval(input('Provide some data here: '))
코드는 입력을 사전으로 구문 분석할 수 있는 경우에만 입력을 평가하여 잠재적인 보안 위험을 방지합니다. 입력이 유효한 사전이 아닌 경우 ast.literal_eval()은 예외를 발생시킵니다. 따라서 신뢰할 수 없는 입력을 처리하려면 eval()보다 ast.literal_eval()을 항상 선호해야 합니다.
위 내용은 Python 보안: 언제 `eval()` 대신 `ast.literal_eval()`을 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!