파이썬에서 요청 라이브러리를 사용하여 http를 통해 많은 수의 이미지 파일을 다운로드합니다. 파이썬에서 BytesIO를 사용하여 수신 된 컨텐트를 raw 바이트로 변환 한 다음 Pillow()를 사용하여이 원시 컨텐트를 jpeg 파일로 저장합니다.이미지 다운로드 mime 형식 유효성 검사 파이썬 요청
from PIL import Image
from io import BytesIO
rsp = requests.get(imageurl)
content_type_received = rsp.headers['Content-Type'] # mime type
binarycontent = BytesIO(rsp.content)
if content_type_received.startswith('image'): # image/jpeg, image/png etc
i = Image.open(binarycontent)
outfilename = os.path.join(outfolder,'myimg'+'.jpg')
with open(outfilename, 'wb') as f:
f.write(rsp.content)
rsp.close()
이 코드의 잠재적 보안 위험 가능성은 무엇입니까? (나는 응답 헤더의 mime 형식이 실제로 서버가 말하고있는 것을 말하는 서버를 얼마나 신뢰할 수 있는지 잘 모르겠다.) 보안 다운로드 루틴을 작성하는 더 좋은 방법이 있습니까?
좋은 답변입니다. 동의하기 전에 응답 내용에서 1024 바이트 만 읽는 이유는 무엇입니까? 이미지에서 MIME 형식을 추론하는 것으로 충분하기 때문에? 호기심에서 벗어나 요청 된 것이 다른 유형의 미디어 일 경우 어떻게 결정됩니까? 예를 들어 mp4라고 말하면 어떨까요? – hAcKnRoCk
mimetype을 정확하게 평가하기 위해 읽어야하는 적절한 바이트 수는 당신이 읽는 파일 유형에 따라 다르므로 알아보기가 어렵습니다. 일부 파일 서명은이 정보를 오프셋과 함께 배치하기도합니다. 1024 바이트는 모든 종류의 이미지 유형에 충분히 적합해야하지만 그 가치는 오히려 "인터넷 지식"과 같습니다. –