보안 고려 사항

보안 고려 사항

다음 모듈들은 특별한 보안 고려 사항이 있습니다.

  • base64: RFC 4648의 base64 보안 고려 사항 참고
  • hashlib: 모든 생성자는 "usedforsecurity" 키워드 전용 인자를 받으며, 이는 알려진 안전하지 않거나 차단된 알고리즘을 비활성화합니다
  • http.server: 기본적인 보안 검사만 구현하므로 프로덕션 사용에는 적합하지 않습니다. 보안 고려 사항을 참고하세요
  • logging: 로깅 설정은 eval()을 사용합니다
  • multiprocessing: Connection.recv()pickle을 사용합니다
  • pickle: pickle의 전역 제한(restricting globals) 참고
  • random: 보안 목적으로 사용해서는 안 되며 대신 secrets를 사용하세요
  • shelve: shelve는 pickle 기반이므로 신뢰할 수 없는 소스 처리에 부적합합니다
  • ssl: SSL/TLS 보안 고려 사항 참고
  • subprocess: 서브프로세스 보안 고려 사항 참고
  • tempfile: mktemp는 경쟁 조건(race condition)에 취약하여 폐기되었습니다
  • xml: XML 보안 참고
  • zipfile: 악의적으로 만들어진 .zip 파일은 디스크 용량 고갈을 유발할 수 있습니다

-I 명령줄 옵션을 사용하면 Python을 격리(isolated) 모드로 실행할 수 있습니다. 그것을 사용할 수 없을 때는 -P 옵션 또는 PYTHONSAFEPATH 환경 변수를 사용하여 현재 디렉터리, 스크립트 디렉터리, 빈 문자열과 같은 잠재적으로 안전하지 않은 경로를 sys.path 앞에 붙이지 않도록 할 수 있습니다.

출처: Python documentation

본문

위에 나열된 모듈들은 각각 고유한 보안 고려 사항을 지니고 있습니다. 신뢰할 수 없는 입력을 다룰 때는 반드시 해당 모듈의 문서에 명시된 보안 주의 사항을 확인하세요. 특히 pickle과 이를 기반으로 하는 shelve는 역직렬화 과정에서 임의 코드 실행 위험이 있으므로 신뢰할 수 없는 소스의 데이터를 절대 역직렬화해서는 안 됩니다.

암호학적으로 안전한 난수가 필요하다면 random이 아니라 secrets 모듈을 사용하세요. 웹 서버를 구축할 때는 http.server가 기본 보안 검사만 수행하므로 실제 운영 환경에는 적합하지 않으며, 검증된 웹 프레임워크를 사용하는 것이 좋습니다.

더 알아보기 (Learn more)