Φίλτρα (Filter) στο PHP

PHP 过滤器用于验证和过滤来自非安全来源的数据,如用户的输入。

什么是 PHP 过滤器?

PHP 过滤器用于验证和过滤来自非安全来源的数据。

验证和过滤用户输入或自定义数据是任何 Web 应用程序的重要组成部分。

设计 PHP 过滤器扩展的目的是使数据过滤更加轻松快捷。

为什么使用过滤器?

几乎所有的 web 应用程序都依赖于外部的输入。这些数据通常来自用户或其他应用程序(如 web 服务)。通过使用过滤器,您可以确保应用程序获得正确的输入类型。

Πρέπει πάντα να φιλτράρετε τα εξωτερικά δεδομένα!

Η φιλτράρισμα εισόδου είναι ένα από τα πιο σημαντικά θέματα ασφαλείας των εφαρμογών.

Τι είναι τα εξωτερικά δεδομένα;

  • Δεδομένα εισόδου από φόρμα
  • Cookies
  • Μεταβλητές διακομιστή
  • Αποτελέσματα ερωτημάτων βάσης δεδομένων

Λειτουργίες και φίλτρα

Για να φιλτράσετε μεταβλητές, χρησιμοποιήστε μια από τις παρακάτω λειτουργίες φίλτρων:

  • filter_var() - Φιλτράρισμα μιας μοναδικής μεταβλητής μέσω ενός καθορισμένου φίλτρου
  • filter_var_array() - Φιλτράρισμα πολλαπλών μεταβλητών μέσω των ίδιων ή διαφορετικών φίλτρων
  • filter_input - Λήψη μιας μεταβλητής εισόδου και φιλτράρισμα
  • filter_input_array - Λήψη πολλαπλών μεταβλητών εισόδου και φιλτράρισμα μέσω των ίδιων ή διαφορετικών φίλτρων

Στην παρακάτω παράδειγμα, χρησιμοποιούμε τη συνάρτηση filter_var() για να επαληθεύσουμε έναν ακέραιο:

<?php
$int = 123;
if(!filter_var($int, FILTER_VALIDATE_INT))
 {
 echo(\"Integer is not valid\");
 }
else
 {
 echo(\"Integer is valid\");
 }
?>

Το παραπάνω κώδικας χρησιμοποιεί το φίλτρο filter_var(\"FILTER_VALIDATE_INT\") για να φιλτράρει τη μεταβλητή. Επειδή ο ακέραιος είναι νόμιμος, η έξοδος του κώδικα είναι: \"Integer is valid\"

Αν προσπαθήσουμε να χρησιμοποιήσουμε μια μεταβλητή που δεν είναι ακέραιος, η έξοδος είναι: \"Integer is not valid\"

Για πλήρη λίστα λειτουργιών και φίλτρων, επισκεφθείτε τον ιστότοπό μας Εγχειρίδιο Φίλτρων PHP.

Επαλήθευση και καθαρισμός

Υπάρχουν δύο φίλτροι:

Επαλήθευση φίλτρων:

  • Χρησιμοποιείται για την επαλήθευση εισόδου χρηστών
  • Σταγανωμένοι κανόνες μορφής (π.χ. επαλήθευση URL ή E-Mail)
  • Επιστρέφει την αναμενόμενη τύπο, αν είναι επιτυχής, αν αποτύχει επιστρέφει FALSE

Φίλτρο καθαρισμού:

  • Χρησιμοποιείται για να επιτρέψει ή να απαγορεύσει χαρακτήρες στη δεδομένη αλφαριθμητική αλυσίδα
  • Χωρίς κανόνες μορφής δεδομένων
  • Πάντα επιστρέφει μια αλφαριθμητική αλυσίδα

Επιλογές και σημάδια

Οι επιλογές και τα σημάδια χρησιμοποιούνται για να προσθέσουμε επιπλέον επιλογές φιλτράρισματος στον καθορισμένο φίλτρο.

Διαφορετικοί φίλτροι έχουν διαφορετικές επιλογές και σημάδια.

Στην παρακάτω παράδειγμα, χρησιμοποιούμε τη συνάρτηση filter_var() και τις επιλογές \"min_range\" και \"max_range\" για να επαληθεύσουμε έναν ακέραιο:

<?php
$var=300;
$int_options = array(
"options"=>array
 (
 \"min_range\"=>0,
 \"max_range\"=>256
 )
);
if(!filter_var($var, FILTER_VALIDATE_INT, $int_options))
 {
 echo(\"Integer is not valid\");
 }
else
 {
 echo(\"Integer is valid\");
 }
?>

Κατά τον ίδιο τρόπο όπως και ο παραπάνω κώδικας, οι επιλογές πρέπει να τοποθετηθούν σε ένα σχετικό δομήμα με όνομα "options". Αν χρησιμοποιείτε σημάδια, δεν χρειάζεται να τοποθετηθούν στο δομήμα.

Επειδή το ακέραιο είναι "300", δεν βρίσκεται στον καθορισμένο ορίζοντα, η έξοδος του κώδικα θα είναι "Το ακέραιο δεν είναι έγκυρο".

Για πλήρη λίστα με τις συνάρτησεις και τους φίλτρους, επισκεφθείτε το CodeW3C.com που παρέχει: Εγχειρίδιο Φίλτρων PHPΕκεί μπορείτε να δείτε τις διαθέσιμες επιλογές και σημάδια των φίλτρων.

Επαλήθευση εισόδου

Ας προσπαθήσουμε να επαληθεύσουμε την είσοδο που αποστέλλεται από τη φόρμα.

Η πρώτη πράξη που πρέπει να κάνουμε είναι να επιβεβαιώσουμε ότι υπάρχουν τα δεδομένα εισόδου που αναζητούμε.

Στη συνέχεια, χρησιμοποιούμε τη συνάρτηση filter_input() για τον φιλτράρισμα των δεδομένων εισόδου.

Στο παρακάτω παράδειγμα, η μεταβλητή εισόδου "email" μεταφέρεται στη σελίδα PHP:

<?php
if(!filter_has_var(INPUT_GET, "email"))
 {
 echo("Το τύπος εισόδου δεν υπάρχει");
 }
else
 {
 if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL))
  {
  echo "Το E-Mail δεν είναι έγκυρο";
  }
 else
  {
  echo "Το E-Mail είναι έγκυρο";
  }
 }
?>

Example Explanation:

Στο παρακάτω παράδειγμα υπάρχει μεταβλητή εισόδου (email) που μεταφέρεται μέσω μεθόδου "GET":

  1. Ελέγξτε αν υπάρχει μεταβλητή εισόδου τύπου "GET" για το "email"
  2. Αν υπάρχει μεταβλητή εισόδου, ελέγξτε αν είναι έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου

Καθαρισμός εισόδου

Ας προσπαθήσουμε να καθαρίσουμε την URL που αποστέλλεται από τη φόρμα.

Πρώτα από όλα, πρέπει να επιβεβαιώσουμε ότι υπάρχουν τα δεδομένα εισόδου που αναζητούμε.

Στη συνέχεια, χρησιμοποιούμε τη συνάρτηση filter_input() για τον καθαρισμό των δεδομένων εισόδου.

Στο παρακάτω παράδειγμα, η μεταβλητή εισόδου "url" μεταφέρεται στη σελίδα PHP:

<?php
if(!filter_has_var(INPUT_POST, "url"))
 {
 echo("Το τύπος εισόδου δεν υπάρχει");
 }
else
 {
 $url = filter_input(INPUT_POST, "url", FILTER_SANITIZE_URL);
 }
?>

Example Explanation:

Στο παρακάτω παράδειγμα υπάρχει μεταβλητή εισόδου (url) που μεταφέρεται μέσω μεθόδου "POST":

  1. Ελέγξτε αν υπάρχει μεταβλητή εισόδου τύπου "POST" για το "url"
  2. Αν υπάρχει αυτή η μεταβλητή εισόδου, καθαρίστε την (αφαιρέστε μη νόμιμα χαρακτήρες) και αποθηκεύστε την στη μεταβλητή $url

Εάν η μεταβλητή εισόδου είναι παρόμοια με αυτήν: "http://www.W3非o法ol.com.c字符n/", τότε η καθαρισμένη μεταβλητή $url θα πρέπει να είναι παρόμοια με αυτήν:

http://www.codew3c.com/

Φιλτράρισμα πολλαπλών εισόδων

Οι φόρμες συχνά αποτελούνται από πολλαπλά πεδία εισόδου. Για να αποφύγουμε την επαναλαμβανόμενη κλήση των filter_var ή filter_input, μπορούμε να χρησιμοποιήσουμε τις συναρτήσεις filter_var_array ή filter_input_array.

Σε αυτό το παράδειγμα, χρησιμοποιούμε τη συνάρτηση filter_input_array() για να φιλτράρουμε τρεις μεταβλητές GET. Οι ληφθείσες μεταβλητές GET είναι ένα όνομα, μια ηλικία και μια διεύθυνση email:

<?php
$filters = array
 (
 "name" => array
  (
  "filter"=>FILTER_SANITIZE_STRING
  ),
 "age" => array
  (
  "filter"=>FILTER_VALIDATE_INT,
  "options"=>array
   (
   "min_range"=>1,
   "max_range"=>120
   )
  ),
 "email"=> FILTER_VALIDATE_EMAIL,
 );
$result = filter_input_array(INPUT_GET, $filters);
if (!$result["age"])
 {
 echo("Age must be a number between 1 and 120.<br />");
 }
elseif(!$result["email"])
 {
 echo("E-Mail is not valid.<br />");
 }
else
 {
 echo("User input is valid");
 }
?>

Example Explanation:

Στο παραπάνω παράδειγμα υπάρχουν τρεις μεταβλητές εισόδου που μεταφέρονται μέσω του μέθοδου "GET" (name, age και email)

  1. Ρύθμιση μιας λίστας που περιέχει τα ονόματα των μεταβλητών εισόδου και τα φίλτρα που χρησιμοποιούνται για τις καθορισμένες μεταβλητές εισόδου
  2. Κλήση της συνάρτησης filter_input_array, με παραμέτρους τις μεταβλητές GET εισόδου και το πρόσφατα ρυθμισμένο πίνακα
  3. Ελέγχουμε αν οι μεταβλητές "age" και "email" του μεταβλητού $result έχουν παράνομο εισόδημα. (Αν υπάρχει παράνομο εισόδημα,)

Ο δεύτερος παράμετρος της συνάρτησης filter_input_array() μπορεί να είναι λίστα ή μοναδικό ID φίλτρου.

Εάν ο παράμετρος είναι το ID ενός μοναδικού φίλτρου, τότε αυτό το καθορισμένο φίλτρο θα φιλτράρει όλες τις τιμές του εισερχόμενου πίνακα.

Εάν ο παράμετρος είναι μια λίστα, τότε αυτή η λίστα πρέπει να ακολουθεί τις παρακάτω κανόνες:

  • It must be an associative array containing the input variables as the keys of the array (for example, the "age" input variable)
  • The values of this array must be the filter ID or an array that specifies the filter, flags, and options

Using Filter Callback

By using the FILTER_CALLBACK filter, you can call a custom function and use it as a filter. This way, we have complete control over data filtering.

You can create your own custom functions or use existing PHP functions.

Specify the method you want to use for the filter function, just like specifying options.

In the following example, we use a custom function to convert all "_" to spaces:

<?php
function convertSpace($string)
{
return str_replace("_", " ", $string);
}
$string = "Peter_is_a_great_guy!";
echo filter_var($string, FILTER_CALLBACK, array("options"=>"convertSpace"));
?>

The result of the above code is as follows:

Peter is a great guy!

Example Explanation:

The above example converts all "_" to spaces:

  1. Create a function that replaces "_" with a space
  2. Call the filter_var() function, which takes the FILTER_CALLBACK filter and an array containing our function