Securització inputs
Sens dubte. Les Funcions de Filtre de PHP representen un conjunt d'eines essencial per a qualsevol desenvolupador, ja que són la manera més segura i recomanada de gestionar les dades d'entrada d'usuari i validar variables. El seu objectiu principal és separar les dades brutes de la lògica de l'aplicació, garantint que només es processin dades netes i amb el format esperat.
Funcions de Filtre (Visió Detallada)
Les funcions es divideixen en dos grups: les que treballen amb variables externes (com $_GET o $_POST) i les que treballen amb variables locals.
| Funció | Descripció Detallada | Ús Típic |
filter_input() |
Obté una variable d'entrada externa específica (de les superglobals $_GET, $_POST, etc.) i l'aplica un filtre de validació o sanejament en una sola operació. |
La forma més segura d'obtenir dades de formularis (p. ex., obtenir i validar una adreça de correu electrònic d'un camp POST). |
filter_input_array() |
Obté múltiples variables d'entrada externes i permet aplicar diferents filtres a cadascuna mitjançant un array de definició. | Processar la totalitat d'un formulari amb diversos camps i requisits de filtre diferents. |
filter_var() |
Aplica un filtre de validació o sanejament a qualsevol variable local de l'script (no d'entrada externa). | Validar dades obtingudes d'una base de dades, arxiu de configuració, o variables definides dins de la lògica. |
filter_var_array() |
Filtra múltiples variables locals utilitzant un array de definició. | Validar un array de dades de configuració abans d'utilitzar-les. |
filter_has_var() |
Comprova si una variable d'entrada d'un tipus concret existeix ($_POST['email']). |
Determinar si s'ha enviat un formulari o si un camp concret està present. |
filter_list() |
Retorna un array amb tots els noms de filtre disponibles. | Diagnòstic i depuració (per veure quins filtres suporta la teva instal·lació de PHP). |
filter_id() |
Retorna l'ID sencer d'un nom de filtre donat. | Ús intern o per generar mapes de filtres. |
Tipus de filtres (Validació vs. Sanejament)
Els filtres es divideixen en dos grans grups, que actuen de manera fonamentalment diferent:
Filtres de validació (FILTER_VALIDATE_...)
Aquests filtres només comproven si la dada compleix un format o regla específica.
-
Retorn:
-
La dada original, si la validació és exitosa (
true). -
false, si la dada no compleix el format (p. ex., un string no és una adreça de correu electrònic vàlida).
-
-
Objectiu: Assegurar que la dada és correcta.
Filtres de sanejament (FILTER_SANITIZE_...)
Aquests filtres netegen la dada, eliminant caràcters no desitjats o codificant-los per fer-los segurs.
-
Retorn:
-
La dada modificada i neta.
-
-
Objectiu: Fer que la dada sigui segura, especialment abans de mostrar-la a l'usuari (per prevenir atacs XSS) o abans de guardar-la a la base de dades.
Exemples pràctics (Validació i Sanejament)
Exemple 1: Obtenir i validar una adreça de mail (POST)
Aquest és l'ús més segur per obtenir dades d'entrada d'un formulari:
<?php
// Suposem que $_POST['email'] conté l'entrada de l'usuari
// Utilitzem filter_input()
$email_brut = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
// Saneja: neteja el string, eliminant caràcters que no hauria de tenir un email.
// Validem el format (és vital fer-ho DESPRÉS del sanejament)
if ($email_brut !== false) {
$email_validat = filter_var($email_brut, FILTER_VALIDATE_EMAIL);
if ($email_validat) {
echo "Adreça de correu electrònic vàlida i segura: " . $email_validat;
} else {
echo "Error: El format de l'adreça no és correcte.";
}
} else {
echo "Error: El camp de correu electrònic és necessari.";
}
Exemple 2: Validar un nombre enter amb rang i flags
Validem que una variable local (o d'entrada) sigui un enter i que estigui dins d'un rang concret.
<?php
$edat_entrada = "35";
$opcions = [
'options' => [
'min_range' => 18,
'max_range' => 99
]
];
// Validació de l'enter amb un filtre de rang
$edat_validada = filter_var(
$edat_entrada,
FILTER_VALIDATE_INT,
$opcions
);
if ($edat_validada === false) {
echo "L'edat ha de ser un enter entre 18 i 99.";
} else {
echo "Edat processada: " . $edat_validada;
}
Exemple 3: Filtrar múltiples entrades (filter_input_array)
Utilització de filter_input_array() per processar un formulari sencer amb diferents regles.
<?php
// Definim les regles de filtratge
$definicions = [
'nom' => [
'filter' => FILTER_SANITIZE_STRING, // Neteja la cadena (elimina tags)
'flags' => FILTER_FLAG_NO_ENCODE_QUOTES // No codifica cometes
],
'quantitat' => [
'filter' => FILTER_VALIDATE_FLOAT, // Valida com a número flotant
'options' => ['default' => 0.0] // Si falla, estableix 0.0
],
'web' => FILTER_VALIDATE_URL // Validació simple d'URL
];
// Suposant que tenim dades a $_POST, les filtrem totes
$resultats_filtrats = filter_input_array(INPUT_POST, $definicions);
if ($resultats_filtrats['web'] === false) {
echo "La URL no és vàlida.";
} else {
echo "Nom netejat: " . $resultats_filtrats['nom'];
}
Referències PHP.net
Per a una referència exhaustiva de tots els filtres, opcions i constants, consulta la secció oficial de la documentació:
-
Visió General de les Funcions de Filtre: https://www.php.net/manual/en/book.filter.php
-
Funció
filter_input(): https://www.php.net/manual/en/function.filter-input.php -
Llista Completa de Constants de Filtre: https://www.php.net/manual/en/filter.constants.php
Utilitzar aquestes funcions és l'estàndard modern en PHP per garantir la seguretat contra vulnerabilitats comunes com Injecció SQL (juntament amb prepared statements) i Cross-Site Scripting (XSS).
Mai s'ha de confiar en les dades d'entrada sense una validació i un sanejament adequats.