Hoy una lección de seguridad en programación web: evitar que a vuestra página le hagan un ataque por XSS (Cross Site Scripting).
Hay frameworks como Symphony o CakePHP
que ya se encargan de implementar este tipo de seguridad, al igual que
también lo hacen ciertos gestores de contenidos. Pero si se da el caso
de que no estás usando ninguno, estás haciendo PHP “a pelo”, lo mejor
será que recurramos a la clase PHP Input Filter.
Dicha clase permite filtrar código malicioso ingresado en los
formularios para prevenir ataques XSS de manera sencilla, pero tiene la
cualidad de no limpiar determinadas etiquetas o atributos si queremos.
Para utilizar esta clase, la descargaremos desde el enlace anterior e
incluiremos class.inputfilter.php al inicio de nuestro códgi. Luego
crearemos una instancia de la clase InputFilter, entonces podremos
filtrar los datos con el método process:
require_once("class.inputfilter.php");
$filter = new InputFilter();
$variable = $filter->process($_POST['variable']);
Esto nos permitiría limpiar de etiquetas la variable enviada por $_POST
llamada variable. ¿Y si queremos limpiar todos los campos enviados por
el método post? Pues basta con pasarle todo el array:
$_POST = $filter->process($_POST);
Y con eso tendríamos el array $_POST limpio de etiquetas y securizado.
Pero ¿y si queremos permitir ciertas etiquetas? Imaginemos que desde un
input text metemos texto formateado, y nos interesa que sí puedan subir
saltos de línea, texto en negrita o cursiva. Pues muy sencillo también,
ya que basta con pasar en la creación del objeto InputFilter un array
con las etiquetas que queremos conservar como parámetro:
$filter = new InputFilter(array('em', 'i', 'br', 'b', 'strong'));
$_POST = $filter->process($_POST);
Y esto se puede llevar más allá, porque también podemos decir que se
permitan ciertos atributos de ciertas etiquetas. Por ejemplo, imaginemos
que queremos permitir que inserten enlaces junto a su href y a su id,
pero ningún atributo más:
$filter = new InputFilter(array('a'), array('href', 'id'));
$enlace = $filter->process($_POST['enlace']);
Tras el array de etiquetas pasamos otro array de atributos, simplemente.
Con estos sencillos consejos lograrás que tus formularios sean más seguros en PHP.
No hay comentarios:
Publicar un comentario