>

현재 소프트웨어에서 해당 코드를 사용하고 있습니다. 파일 확장자를 확인하는 것이 안전합니까, 아니면이를 우회 할 방법이 있습니까?

               $ext = explode('.',$_FILES['file']['name']);
                $extension = end($ext);
                if($extension == 'jpg' || $extension == 'png' || $extension == 'JPG' || $extension == 'jpeg' || $extension == 'gif' || $extension == 'pjpeg' || $extension == 'x-png'){
                    $extension = $extension;
                }
                else {
                    echo 1;
                    die();
                }

감사합니다 ..


  • 답변 # 1

    와이즈 비즈

    이를 우회하는 한 가지 방법은 파일 이름을 바꾸는 것입니다.

    결국 현재 파일 이름 부분 만 확인합니다.

    이미지 업로드를 안전하게 처리하기 위해 OWASP는 다시 쓰기 접근 방식을 사용하는 것이 좋습니다.

    PHP에서는 gd 또는 imagick으로 이미지를로드하고 입력을 기반으로 새 이미지를 저장하면됩니다. 비교적 쓸모없는 단계처럼 들릴 수 있지만 실제로 이미지를 처리하고 있는지 확인하는 매우 안전한 방법입니다.

    편집 :이 답변도 참조하십시오.

  • 답변 # 2

    개인적으로 파일 확장자 만 확인하는 것은 좋지 않습니다. 현재 접근 방식에 따라 고려해야 할 몇 가지 사항 :

    <올>

    mypicture.jpg.php라는 파일을 업로드하면 현재 if 문 로직이이를 잡아낼 것이라고 상상해보십시오. 테스트 할 가치가 있습니까?

    다음에 (1) 대답이 '아니요'인 경우 다음 질문은 php 이미지에 php 코드가 포함되어 있는지 웹 응용 프로그램에서 다양한 권한 상승으로 이어질 수 있는지 응용 프로그램에서 확인합니까?

    따라서 Stratadox의 이전 답변에 따라이 OWASP Unrestricted File Upload 페이지도 읽었습니다. Stratadox가 친절하게 제공 한 OWASP 링크는 예방 기술에 더 중점을두고 있으며, 제공 한 링크는 공격적인 측면입니다. 함께 합치면 도움이 될 것 같습니다.

    요약하면, 현재 파일 확장자 확인은 유지할 수 있지만 if 문 내에서 몇 가지 고급 확인은 확장 할 수 있습니다. 위에서 언급 한 좋은 제안은 네이티브 PHP 이미지 검사 기능/라이브러리입니다. gd 또는 imagick.

    참고-보안 결함에 대한 기본 PHP 이미지 검사 기능/라이브러리를 항상 조사하고 (Google이 도와드립니다) 기능/설정을 올바르게 구성하고 있는지 확인하십시오. 보안을 강화하려는 개발자가 되려면 좋은 방법입니다.

    이것이 도움이되기를 바랍니다.

  • 답변 # 3

    가장 좋은 방법은 다음과 같습니다.

    are there any way to bypass it?

    ;?>

    <?php //A function to return the extension if you'll want use IT
    function EXTENSION($sr){
    $path_parts = pathinfo($sr);
    $exte='.'.$path_parts['extension'];
    return $exte;
    ;}
    
    

    이 친구처럼 매우 안전합니다.

    <?php //OR Other way // then test if is a Pic list($width, $height, $type, $attr) = getimagesize($_FILES["file"]['tmp_name']); if(preg_match("#.jpg|.jpeg|.png|.gif#i", $_FILES['file']['name']) AND $width > 2 ){ //Do what you want ;}else{ echo 1; die(); ;} ;?>

  • 이전 tsql - sql server count 문제 - 카운트를 0으로 표시하지 않음
  • 다음 python - "문자열 인덱스가 범위를 벗어남"오류를 해결할 수 없습니다