2017-01-31 4 views
1

나는 사용자가 플러그인 (slimimagecropper.com FYI)을 통해 업로드 할 이미지를 저장하기 위해 file_put_contents($path, $image);을 사용하고 있습니다.file_put_contents()로 저장된 이미지의 유효성을 검사하려면 어떻게해야합니까?

저는 XSS에 대해 우려하고 있습니다. 으로 저장하기 전에 XSS에 대해 $image을 확인하는 가장 좋은 방법은 무엇입니까?

+0

파일 유형이 이미지인지 먼저 확인하고 이미지 확장명으로 저장해야합니다. 사람들이'$ image'를 어떻게 업로드합니까? – Antony

+0

감사합니다. 이미지를 얻기 위해 $ _FILES 배열을 보는 플러그인 (slimimagecropper.com)을 통해 업로드합니다. 지금까지 보았 듯이이 플러그인은 XSS 검사 서버 측을 수행하지 않으므로 왜'file_put_contents()'를 쓰는 플러그인 코드를 수정하고 싶습니까? – Nadine

답변

1

참조 : 내용이 이미지 인 경우 PHP Validating the File Upload

유효성을 검사하려면, 당신은 확인해야합니다 :

  • 그것의 확장
    가 .PHP
  • 그것의 MIME 타입과 같은 원격 파일 업로드를 방지하기 위해
    추가 파일 형식을 검사하여
  • 내용 확인
    방지 업로드 이미지로 텍스트와 유사한

확장 및 MIME 타입의 유효성을 검사 (기준에서 촬영)이 코드를 사용해보십시오 :

$allowedExts = array("gif", "jpeg", "jpg", "png"); 
$extension = end(explode(".", $_FILES["file"]["name"])); 
if ((($_FILES["file"]["type"] == "image/gif") 
|| ($_FILES["file"]["type"] == "image/jpeg") 
|| ($_FILES["file"]["type"] == "image/jpg") 
|| ($_FILES["file"]["type"] == "image/png")) 
&& ($_FILES["file"]["size"] < 20000) 
&& in_array($extension, $allowedExts)) 

그리고 그것의 내용을 확인하기 위해이 코드를 (참조에서 촬영) :

$file = $_FILES['file']['tmp_name']; 
if (file_exists($file)) { 
    $imagesizedata = getimagesize($file); 
    if ($imagesizedata === FALSE) { 
     //not image 
    } else { 
     //image 
    } 
} 
2

사용자 업로드를 삭제할 수있는 몇 가지 방법이 있습니다. $_FILES의 모든 내용을 조작 할 수 있으므로 신뢰할 수 없으므로 을 모두 신뢰하십시오.

파일 이름 :

는 사용자가 제공 한 파일 이름을 신뢰하지 마십시오 - 항상 다른 소독 입력으로 저장합니다. image.jpg.php ->uniquestring_programatically_generated.jpg

Getimagesize :

사용 방법 getimagesize($filename)은 실제 이미지와 확인하고, 그것은 크기를 갖는다.

관련 문제