Die Funktion filter_input wird verwendet, um Eingabedaten in PHP zu erhalten und zu filtern. Die grundlegende Verwendung ist wie folgt:
<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>
Typ : Geben Sie den Typ der Eingabedaten an, z. B. input_get , input_post , input_cookie usw.
VARIABLE_NAME : Geben Sie den Namen der Variablen ein.
Filter : Der angewandte Filtertyp, der eine vordefinierte Filterkonstante sein kann (z. B. filter_validate_int ).
Optionen : zusätzliche Optionen (optional) für Filter.
Für die Verarbeitung von Benutzer -Upload -Dateien müssen wir normalerweise auf die Felder zugreifen, die mit dem Hochladen von Dateien über das Hyperglobal -Array $ _Files im Zusammenhang mit dem Hochladen von Dateien zugreifen. Obwohl filter_input nicht direkt auf die Datei selbst wirkt, kann es verwendet werden, um andere Eigenschaften der Datei zu filtern, z. B. die Dateigröße und den Typ.
Wenn Benutzer Dateien hochladen, kümmern wir uns normalerweise um Typ, Größe, Name und andere Informationen der Datei. Diese Informationen können effektiv filtriert und über Filter_input verifiziert werden, wodurch die Sicherheit von Upload -Vorgängen verbessert werden kann.
Der MIME -Typ einer Datei ist eine häufige Möglichkeit, festzustellen, ob eine Datei die Erwartungen erfüllt. Wir können filter_input verwenden, um zu überprüfen, ob die vom Benutzer hochgeladene Datei einen bestimmten Typ entspricht. Hier ist ein Beispiel:
<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">"Nicht unterstützte Dateitypen!"</span></span><span>;
</span><span><span class="hljs-keyword">exit</span></span><span>;
}
</span></span>
In diesem Beispiel haben wir den Dateityp gefiltert und nur Bilder in JPEG- und PNG -Formaten hochgeladen. Filter_sanitize_string wird verwendet, um illegale Zeichen zu entfernen. Obwohl die Filterung des MIME -Typs normalerweise vom Server durchgeführt wird, kann diese Filterung als zusätzliche Garantie verwendet werden.
Für die von den Benutzern hochgeladene Dateigröße müssen wir sicherstellen, dass die Datei das vom Server festgelegte maximale Upload -Limit nicht überschreitet. Normalerweise erhalten wir die Größe der hochgeladenen Datei über $ _files ['Datei'] ['Größe'] , können aber auch die Dateigrößen über filter_input filtern und überprüfen.
<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">// Begrenzen Sie die maximale Dateigröße auf1MB</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Zu große Datei,Kann nicht hochladen!"</span></span><span>;
</span><span><span class="hljs-keyword">exit</span></span><span>;
}
</span></span>
In diesem Code wird filter_validate_int verwendet, um zu überprüfen, ob die Größe der Datei ein ganzzahliger Wert ist. Wenn die Dateigröße den festgelegten Maximalwert (z. B. 1 MB) überschreitet, wird die Eingabeaufforderungsnachricht ausgegeben und das Programm beendet.
Das Datei -Upload ist ein sensibler Vorgang in der Webentwicklung. Wenn es nicht validiert und filtriert wird, kann dies zu Sicherheitslücken führen (z. B. Hochladen von böswilligen Dateien, Überschreiben vorhandener Dateien usw.). Die Funktion filter_input kann die Sicherheit des Upload -Prozesses in den folgenden Aspekten verbessern:
Mit Filter_Input zum Filtern der von Benutzern eingereichten Dateityp und Dateigröße können einige gängige Sicherheitsrisiken vermeiden. Verhindern Sie beispielsweise, dass Benutzer übergroße Dateien oder Dateitypen hochladen, die die Erwartungen nicht erfüllen (z. B. Skriptdateien).
<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">"Illegaler Dateityp!"</span></span><span>;
</span><span><span class="hljs-keyword">exit</span></span><span>;
}
</span></span>
Filter_input kann auch den Original -Dateinamen der Datei filtern, um böswillige Zeichen im Dateinamen zu vermeiden und das Risiko von Injektionsangriffen Dateinamen zu verringern.
<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>
In diesem Beispiel verwenden wir regelmäßige Ausdrücke, um illegale Zeichen im Dateinamen zu ersetzen, um sicherzustellen, dass der hochgeladene Dateiname dem erwarteten Format erfüllt und Sicherheitsprobleme verhindern, die Sonderzeichen verursachen können.
Beim Hochladen von Dateien kann der Benutzer eine Datei mit demselben Namen wie die vorhandene Datei auf dem Server hochladen, was dazu führt, dass die Originaldatei überschrieben wird. Um dies zu vermeiden, können wir beim Hochladen der Datei die Dateinamen über die Funktion filter_input filtern und überprüfen.
<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">"Die Datei existiert bereits,Bitte ändern Sie den Dateinamen!"</span></span><span>;
</span><span><span class="hljs-keyword">exit</span></span><span>;
}
</span></span>
Dieser Code vermeidet das Risiko eines Dateiüberschreibens, indem er überprüft, ob der Pfad zum Hochladen von Dateien bereits denselben Dateinamen hat.
Im Folgenden finden Sie ein einfaches Beispiel für Datei -Upload -Handler, in dem die Funktion filter_input zum Filtern und Überprüfung von Dateien von Benutzern kombiniert wird.
<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">"Die Dateigröße überschreitet die Grenze!"</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">"Nicht unterstützte Dateitypen!"</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">"Die Datei existiert bereits,Bitte ändern Sie den Dateinamen!"</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">"Datei hochladen erfolgreich!"</span></span><span>;
}
</span></span>
Die Funktion filter_input wird in PHP verwendet, um Daten von Anforderungen zu erhalten und zu filtern. Obwohl es hauptsächlich zum Verarbeiten von Daten von GET, Post und anderen regulären Anforderungen verwendet wird, kann es auch verwendet werden, um relevante Informationen zu verarbeiten, wenn Benutzer Dateien hochladen. Durch die geeignete Filterung und Überprüfung kann die Sicherheit von Datei -Upload -Vorgängen effektiv erweitert werden und gemeinsame Sicherheitsprobleme wie das Hochladen von Dateien, das Überschreiben von Dateien, illegale Dateitypen usw. können vermieden werden. In praktischen Anwendungen kann Filter_Input als Hilfstool den Entwicklern helfen, sicherere und zuverlässigere Dateien -Upload -Funktionen zu schreiben.