Filter_Input 함수는 PHP에서 입력 데이터를 얻고 필터하는 데 사용됩니다. 기본 사용량은 다음과 같습니다.
<span><span><span class="hljs-title function_ invoke__">filter_input</span></span><span>(type, variable_name, filter = FILTER_DEFAULT, options = </span><span><span class="hljs-literal">null</span></span><span>)
</span></span>
유형 : Input_get , Input_Post , Input_Cookie 등과 같은 입력 데이터 유형을 지정하십시오.
variable_name : 변수의 이름을 입력하십시오.
필터 : 필터 유형이 적용되었으며 사전 정의 된 필터 상수 (예 : Filter_Validate_int ) 일 수 있습니다.
옵션 : 필터의 추가 옵션 (선택 사항).
사용자 업로드 파일을 처리하려면 일반적으로 $ _files Hyperglobal Array를 통해 파일 업로드와 관련된 필드에 액세스해야합니다. Filter_Input은 파일 자체에서 직접 작동하지 않지만 파일 크기 및 유형과 같은 파일의 다른 속성을 필터링하는 데 사용할 수 있습니다.
사용자가 파일을 업로드 할 때 일반적으로 파일의 유형, 크기, 이름 및 기타 정보에 관심이 있습니다. 이 정보는 Filter_Input을 통해 효과적으로 필터링 및 검증하여 업로드 작업의 보안을 향상시킬 수 있습니다.
파일의 마임 유형은 파일이 기대치를 충족하는지 여부를 결정하는 일반적인 방법입니다. Filter_Input을 사용하여 사용자가 업로드 한 파일이 특정 유형을 준수하는지 확인할 수 있습니다. 예는 다음과 같습니다.
<span><span><span class="hljs-variable">$file_type</span></span><span> = </span><span><span class="hljs-title function_ invoke__">filter_input</span></span><span>(INPUT_POST, </span><span><span class="hljs-string">'file_type'</span></span><span>, FILTER_SANITIZE_STRING);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$file_type</span></span><span> !== </span><span><span class="hljs-string">'image/jpeg'</span></span><span> && </span><span><span class="hljs-variable">$file_type</span></span><span> !== </span><span><span class="hljs-string">'image/png'</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"지원되지 않는 파일 유형!"</span></span><span>;
</span><span><span class="hljs-keyword">exit</span></span><span>;
}
</span></span>
이 예에서는 파일 유형을 필터링하고 JPEG 및 PNG 형식의 이미지 만 업로드 할 수있었습니다. Filter_Sanitize_string은 불법 문자를 제거하는 데 사용됩니다. MIME 유형 필터링은 일반적으로 서버에서 수행되지만이 필터링은 추가 보증으로 사용할 수 있습니다.
사용자가 업로드 한 파일 크기의 경우 파일이 서버에서 설정 한 최대 업로드 제한을 초과하지 않도록해야합니다. 일반적으로 $ _files [ 'file'] [ 'size']를 통해 업로드 된 파일의 크기를 얻지 만 filter_input을 통해 파일 크기를 필터링하고 확인할 수도 있습니다.
<span><span><span class="hljs-variable">$file_size</span></span><span> = </span><span><span class="hljs-title function_ invoke__">filter_input</span></span><span>(INPUT_POST, </span><span><span class="hljs-string">'file_size'</span></span><span>, FILTER_VALIDATE_INT);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$file_size</span></span><span> > </span><span><span class="hljs-number">1000000</span></span><span>) { </span><span><span class="hljs-comment">// 최대 파일 크기를 제한하십시오1MB</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"너무 큰 파일,업로드 할 수 없습니다!"</span></span><span>;
</span><span><span class="hljs-keyword">exit</span></span><span>;
}
</span></span>
이 코드에서 Filter_Validate_int는 파일의 크기가 정수 값인지 확인하는 데 사용됩니다. 파일 크기가 설정 최대 값 (예 : 1MB)을 초과하면 프롬프트 메시지가 출력되고 프로그램이 종료됩니다.
파일 업로드는 웹 개발에서 민감한 작업입니다. 검증 및 필터링되지 않으면 보안 취약점 (예 : 악성 파일 업로드, 기존 파일 덮기 등)으로 이어질 수 있습니다. Filter_Input 함수는 다음 측면에서 업로드 프로세스의 보안을 향상시킬 수 있습니다.
Filter_Input을 사용하여 파일 유형과 파일 크기를 필터링하면 일반적인 보안 위험을 피할 수 있습니다. 예를 들어, 사용자가 기대치 (예 : 스크립트 파일)를 충족하지 않는 대형 파일 또는 파일 유형을 업로드하지 못하게합니다.
<span><span><span class="hljs-variable">$file_type</span></span><span> = </span><span><span class="hljs-title function_ invoke__">filter_input</span></span><span>(INPUT_POST, </span><span><span class="hljs-string">'file_type'</span></span><span>, FILTER_SANITIZE_STRING);
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">in_array</span></span><span>(</span><span><span class="hljs-variable">$file_type</span></span><span>, [</span><span><span class="hljs-string">'image/jpeg'</span></span><span>, </span><span><span class="hljs-string">'image/png'</span></span><span>])) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"불법 파일 유형!"</span></span><span>;
</span><span><span class="hljs-keyword">exit</span></span><span>;
}
</span></span>
Filter_Input은 파일 이름의 악성 문자를 피하고 파일 이름 주입 공격의 위험을 줄이기 위해 파일의 원본 파일 이름을 필터링 할 수도 있습니다.
<span><span><span class="hljs-variable">$file_name</span></span><span> = </span><span><span class="hljs-title function_ invoke__">filter_input</span></span><span>(INPUT_POST, </span><span><span class="hljs-string">'file_name'</span></span><span>, FILTER_SANITIZE_STRING);
</span><span><span class="hljs-variable">$file_name</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/[^a-zA-Z0-9_\-\.]/'</span></span><span>, </span><span><span class="hljs-string">'_'</span></span><span>, </span><span><span class="hljs-variable">$file_name</span></span><span>);
</span></span>
이 예에서는 정규 표현식을 사용하여 파일 이름의 불법 문자를 대체하여 업로드 된 파일 이름이 예상 형식을 충족하고 특수 문자가 발생할 수있는 보안 문제를 방지합니다.
파일을 업로드 할 때 유효한 확인이 수행되지 않으면 사용자는 서버의 기존 파일과 동일한 이름의 파일을 업로드하여 원본 파일을 덮어 쓸 수 있습니다. 이를 피하기 위해 파일을 업로드 할 때 Filter_Input 함수를 통해 파일 이름을 필터링하고 확인할 수 있습니다.
<span><span><span class="hljs-variable">$file_name</span></span><span> = </span><span><span class="hljs-title function_ invoke__">filter_input</span></span><span>(INPUT_POST, </span><span><span class="hljs-string">'file_name'</span></span><span>, FILTER_SANITIZE_STRING);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">file_exists</span></span><span>(</span><span><span class="hljs-string">"/uploads/<span class="hljs-subst">$file_name</span></span></span><span>")) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"파일이 이미 존재합니다,파일 이름을 변경하십시오!"</span></span><span>;
</span><span><span class="hljs-keyword">exit</span></span><span>;
}
</span></span>
이 코드는 파일 업로드 경로에 이미 동일한 파일 이름이 있는지 확인하여 파일 덮어 쓰기 위험을 피합니다.
아래는 Filter_Input 함수를 결합하여 사용자가 업로드 한 파일을 필터링하고 확인하는 방법을 보여주는 간단한 파일 업로드 핸들러 예제입니다.
<span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$_SERVER</span></span><span>[</span><span><span class="hljs-string">'REQUEST_METHOD'</span></span><span>] == </span><span><span class="hljs-string">'POST'</span></span><span>) {
</span><span><span class="hljs-variable">$file_type</span></span><span> = </span><span><span class="hljs-title function_ invoke__">filter_input</span></span><span>(INPUT_POST, </span><span><span class="hljs-string">'file_type'</span></span><span>, FILTER_SANITIZE_STRING);
</span><span><span class="hljs-variable">$file_size</span></span><span> = </span><span><span class="hljs-title function_ invoke__">filter_input</span></span><span>(INPUT_POST, </span><span><span class="hljs-string">'file_size'</span></span><span>, FILTER_VALIDATE_INT);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$file_size</span></span><span> > </span><span><span class="hljs-number">1000000</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"파일 크기는 한계를 초과합니다!"</span></span><span>;
</span><span><span class="hljs-keyword">exit</span></span><span>;
}
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">in_array</span></span><span>(</span><span><span class="hljs-variable">$file_type</span></span><span>, [</span><span><span class="hljs-string">'image/jpeg'</span></span><span>, </span><span><span class="hljs-string">'image/png'</span></span><span>])) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"지원되지 않는 파일 유형!"</span></span><span>;
</span><span><span class="hljs-keyword">exit</span></span><span>;
}
</span><span><span class="hljs-variable">$file_name</span></span><span> = </span><span><span class="hljs-title function_ invoke__">filter_input</span></span><span>(INPUT_POST, </span><span><span class="hljs-string">'file_name'</span></span><span>, FILTER_SANITIZE_STRING);
</span><span><span class="hljs-variable">$file_name</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/[^a-zA-Z0-9_\-\.]/'</span></span><span>, </span><span><span class="hljs-string">'_'</span></span><span>, </span><span><span class="hljs-variable">$file_name</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">file_exists</span></span><span>(</span><span><span class="hljs-string">"/uploads/<span class="hljs-subst">$file_name</span></span></span><span>")) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"파일이 이미 존재합니다,파일 이름을 변경하십시오!"</span></span><span>;
</span><span><span class="hljs-keyword">exit</span></span><span>;
}
</span><span><span class="hljs-title function_ invoke__">move_uploaded_file</span></span><span>(</span><span><span class="hljs-variable">$_FILES</span></span><span>[</span><span><span class="hljs-string">'file'</span></span><span>][</span><span><span class="hljs-string">'tmp_name'</span></span><span>], </span><span><span class="hljs-string">"/uploads/<span class="hljs-subst">$file_name</span></span></span><span>");
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"파일 업로드를 성공적으로 업로드하십시오!"</span></span><span>;
}
</span></span>
Filter_Input 함수는 PHP에서 요청에서 데이터를 얻고 필터링하는 데 사용됩니다. 주로 Get, Post 및 기타 정기 요청에서 데이터를 처리하는 데 사용되지만 사용자가 파일을 업로드 할 때 관련 정보를 처리하는 데 사용될 수도 있습니다. 적절한 필터링 및 확인을 통해 파일 업로드 작업의 보안을 효과적으로 향상시킬 수 있으며 악의적 인 파일 업로드, 파일 덮어 쓰기, 불법 파일 유형 등과 같은 일반적인 보안 문제를 피할 수 있습니다. 실제 애플리케이션에서는 보조 도구 인 Filter_Input이 개발자가보다 안전하고 안정적인 파일 업로드 기능을 작성하는 데 도움이 될 수 있습니다.