나는 다양한 시장/국가에 대한 노출이 많은 현재의 스크립트를 대체 할 PHP 스크립트를 개발합니다. 다른 사람들 간의이 스크립트는 사진 업로드 기능을 제공합니다.PHP 이미지 업로드 보안 접근
많은 문제에 대해 읽은 후 아래에 설명 된 방법을 따랐습니다. 보안에 대한 귀하의 의견에 진심으로 감사드립니다.
- 사진은 웹 루트 외부의 개인 777 폴더에 업로드됩니다.
- 흰색 나열된 확장명에 대한 검사가 수행됩니다 (jpgs, gifs, png 만 허용). 다른 모든 항목은 삭제됩니다.
- 최소 최대 크기 및 사진 유효성을 확인하기 위해 getimagesize를 사용합니다.
- mimetype과 파일 확장명이 일치하는지 확인하십시오.
- 업로드 된 사진을 표준 치수에 맞게 크기 조정 (imagecopyresampled 사용).
- 생성 된 파일을 jpg로 저장합니다.
- 원본 파일 제거.
- 사진을 새로운 이름 (무작위가 아닌), 즉 img51244.jpg로 저장하십시오.
- 예측할 수없는 알고리즘에 따라 새 사진을 공용 폴더의 변수 하위 디렉터리 (권한 777 개)로 이동합니다. 즉,
img10000.jpg
은photos/a/f/0/img10000.jpg
에 저장되고img10001.jpg
은photos/0/9/3/img10001.jpg
에 저장됩니다. 이는 다른 이유 (정적 콘텐츠 제공 또는 CDN 사용을위한 하위 도메인 사용)로 수행됩니다.
스크립트는 Linux 전용 서버에서 실행됩니다.
아무 것도 나에게 여기 저기 뛰어 오르지 않습니다. 777 권한이 떨어져 폴더에 - 나는 그것을 이해, 777 권한이있는 경우 개인 아닙니다. 하지만 지금까지 내가 말할 수있는 한 서버가 손상된 경우에만 문제가 될 것입니다 (적어도이 스크립트를 통해 나에게 잘 보이지 않습니다) – jammypeach
777은 안전하지 않은 소리를냅니다. 가능한 관련 http://stackoverflow.com/questions/3644138/secure-user-image-upload-capabilities-in-php – ajreal
매우 자유로운 권한을 제외하고 나에게 아주 좋은 소리. 아마 그들은 다소 제한 될 수 있습니까? 그렇지 않으면 EXIF 데이터 제거를 포함하여 내가 생각할 수있는 모든 작업을 수행합니다. –