4

Sanear entradas de datos en PHP

Sanear las entradas de datos (del inglés, sanitize data inputs) es una práctica que todos los desarrolladores webs deben hacer en sus proyectos, sobre todo cuando manejamos datos de una base de datos. No sanear estas entradas puede significar que nuestra web es vulnerable a ataques de inyección SQL, por ejemplo.

Para evitar esto y hacer nuestra web más segura, yo siempre uso unas funciones en PHP que ví en el blog de Denham Coote.

Primero, limpiamos de las entradas los tags HTML, Javascript, style y comentarios.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
function cleanInput($input) {
 
  $search = array(
    '@<script [^>]*?>.*?@si',            // Strip out javascript
    '@< [/!]*?[^<>]*?>@si',            // Strip out HTML tags
    '@<style [^>]*?>.*?</style>@siU',    // Strip style tags properly
    '@< ![sS]*?--[ tnr]*>@'         // Strip multi-line comments
  );
 
    $output = preg_replace($search, '', $input);
    return $output;
}
?>

Luego añadimos un backslash (barra invertida) a las comillas simples, las comillas dobles, los backslash y los caracteres null. Si tu servidor tiene activado magic_quotes en la configuración de PHP, esto se hará automáticamente. Por si acaso, y para hacer nuestro código más compatible con todas las configuraciones, podemos añadir esta función:

15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
function sanitize($input) {
    if (is_array($input)) {
        foreach($input as $var=>$val) {
            $output[$var] = sanitize($val);
        }
    }
    else {
        if (get_magic_quotes_gpc()) {
            $input = stripslashes($input);
        }
        $input  = cleanInput($input);
        $output = mysql_real_escape_string($input);
    }
    return $output;
}
?>

Ahora podemos sanear cualquier cadena de texto, e incluso arrays. Para usar estas funciones simplemente hay que llamar a la función sanitize con parámetro la cadena (o array) a sanear y nos devolverá la cadena (o array) saneado. Por ejemplo:

<?php
$_GET = sanitize($_GET);
$_POST = sanitize($_POST);
$cadena_final = sanitize($cadena_original);
?>

Ya tenemos nuestros datos en GET, POST y en la cadena saneados y listos para insertar en nuestra base de datos sin complicaciones.

2 comentarios

  1. Hola, soy principiante en PHP el código me parece muy bueno pero no se como llamarlo desde mi aplicación que procesa una forma de contacto web
    Por ejemplo la forma y el código PHP para registrar los datos contienen:

    1
    2
    3
    4
    5
    6
    7
    8
    
    Forma:
    &lt;form ... action=&quot;path to PHP file&quot; ... 
    Message:
     
    ...
     
     
    //PHP file:

    Muchas gracias de antemano,
    Abigail

  2. Perdón.. no registro mi ejemplo de código por completo.

Comentar

*

*

Para añadir código formateado, escribe el código entre <pre lang="php" line="1"> y </pre>

Si quieres un avatar personalizado, créate uno en gravatar.com con tu dirección de correo. Cada vez que comentes con ese correo, aparecerá tu avatar personalizado.