>백엔드 개발 >파이썬 튜토리얼 >신뢰할 수 없는 문자열과 함께 Python의 `eval()`을 사용하는 것이 얼마나 안전합니까?

신뢰할 수 없는 문자열과 함께 Python의 `eval()`을 사용하는 것이 얼마나 안전합니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-27 01:36:10222검색

How Secure Is Using Python's `eval()` with Untrusted Strings?

신뢰할 수 없는 문자열을 사용하는 Python의 eval()의 보안 영향

eval()을 사용하여 신뢰할 수 없는 Python 문자열을 평가할 때 여러 보안 위험이 발생합니다.

1. eval(string, {"f": Foo()}, {})

이것은 안전하지 않습니다. Foo 인스턴스를 통해 "os" 및 "sys"와 같은 내장 기능에 액세스할 수 있으며 잠재적으로 시스템을 손상시킬 수 있습니다.

2. eval(string, {}, {})

이 역시 안전하지 않습니다. 사전을 명시적으로 전달하지 않고도 "len" 및 "list"와 같은 내장 기능을 사용하여 안전하지 않은 다른 API에 접근할 수 있습니다.

3. 내장 기능 허용 안 함

eval() 컨텍스트에서 내장 기능의 존재를 완전히 방지할 수 있는 간단한 방법은 없습니다. Python 인터프리터에 대한 패치가 필요할 수 있습니다.

추가 위험:

"[0] * 100000000"과 같은 악성 문자열은 리소스 고갈을 초래할 수 있습니다. 임의의 표현식을 실행하면 사용자 데이터 및 시스템 보안이 손상될 수 있습니다.

대체 접근 방식:

eval()을 사용하는 대신 신뢰할 수 없는 데이터를 처리하기 위한 다른 방법을 고려하세요. 예:

  • 입력을 삭제하여 잠재적으로 유해한 코드를 제거합니다.
  • RestrictedExecutionEnvironment를 사용하여 코드 실행 범위를 제한합니다.
  • 보안 직렬화 형식을 사용하여 데이터를 전송합니다. 임의의 코드 실행을 허용하지 않습니다.

위 내용은 신뢰할 수 없는 문자열과 함께 Python의 `eval()`을 사용하는 것이 얼마나 안전합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.