보안 고려 사항
보안 고려 사항
다음 모듈들은 특별한 보안 고려 사항이 있습니다.
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 앞에 붙이지 않도록 할 수 있습니다.
본문
위에 나열된 모듈들은 각각 고유한 보안 고려 사항을 지니고 있습니다. 신뢰할 수 없는 입력을 다룰 때는 반드시 해당 모듈의 문서에 명시된 보안 주의 사항을 확인하세요. 특히 pickle과 이를 기반으로 하는 shelve는 역직렬화 과정에서 임의 코드 실행 위험이 있으므로 신뢰할 수 없는 소스의 데이터를 절대 역직렬화해서는 안 됩니다.
암호학적으로 안전한 난수가 필요하다면 random이 아니라 secrets 모듈을 사용하세요. 웹 서버를 구축할 때는 http.server가 기본 보안 검사만 수행하므로 실제 운영 환경에는 적합하지 않으며, 검증된 웹 프레임워크를 사용하는 것이 좋습니다.