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を介して効果的にフィルタリングおよび検証することができ、それによりアップロード操作のセキュリティが改善されます。
ファイルのMIMEタイプは、ファイルが期待を満たしているかどうかを判断する一般的な方法です。 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など)を超えると、プロンプトメッセージが出力され、プログラムが終了します。
ファイルアップロードは、Web開発における敏感な操作です。検証されてフィルタリングされていない場合、セキュリティの脆弱性(悪意のあるファイルのアップロード、既存のファイルの上書きなど)につながる可能性があります。 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、投稿、その他の定期的なリクエストのデータを処理するために使用されますが、ユーザーがファイルをアップロードするときに関連情報を処理するためにも使用できます。適切なフィルタリングと検証により、ファイルアップロード操作のセキュリティを効果的に強化し、悪意のあるファイルのアップロード、ファイル上書き、違法ファイルタイプなどなどの一般的なセキュリティ問題を回避できます。実際のアプリケーションでは、補助ツールとしてのfilter_inputは、開発者がより安全で信頼できるファイルアップロード機能を書き込むのに役立ちます。