Estoy tratando de poner una función de propósito general que se sanee la entrada a una base de datos Mysql. Hasta ahora esto es lo que tengo:

function sanitize($input){
    if(get_magic_quotes_qpc($input)){

        $input = trim($input); //get rid of white space left and right
        $input = htmlentities($input); //convert symbols to html entities
        return $input;
    } else {

        $input = htmlentities($input); //convert symbols to html entities
        $input = addslashes($input); //server doesn't add slashes, so we will add them to escape ',",\,NULL
        $input = mysql_real_escape_string($input); //escapes \x00, \n, \r, \, ', " and \x1a
        return $input;
    }
}

Si he entendido la definición de get_magic_quotes_qpc(). Este es fijado por el php del servidor automáticamente los caracteres de escape en lugar de tener que utilizar addslashes().

He usado de addslashes() y mysql_real_escape_string() correctamente juntos y ¿hay algo más que podría añadir para aumentar la desinfección.

Gracias

Combinando muchas escapando funciones como sea posible no es un buen enfoque. Usted acaba de terminar con triple escapó de datos, y no se puede utilizar para cualquier cosa, pero en la salida html.
Véase también Método para la desinfección de entrada de usuario y ¿cuáles son los mejores PHP entrada de desinfección funciones?
posibles duplicados de Es recomendable tener un santizing función que combina dos o más integrado en la desinfección de las funciones en php?

OriginalEl autor crm | 2012-02-04

5 Comentarios

  1. 28

    htmlentities() no es necesario para hacer que la seguridad de los datos para SQL. Se utiliza cuando el eco de los valores de los datos para la salida de HTML, para evitar vulnerabilidades XSS. Eso también es un importante problema de seguridad que usted necesita ser consciente de, pero no relacionadas con el SQL.

    addslashes() es redundante con mysql_real_escape_string. Usted va a terminar con el literal barras en sus cadenas en la base de datos.

    No utilice comillas mágicas. Esta característica ha estado en desuso durante muchos años. No implementar el código PHP a un entorno donde los magic quotes está habilitado. Si está activada, desactívela. Si se trata de un entorno hospedado y que no se apague magic quotes, conseguir un nuevo proveedor de hosting.

    No uso ext/mysql. No es compatible con los parámetros de la consulta, transacciones, o OO de uso.

    Uso PDO, y hacer sus consultas más seguras mediante el uso de consultas preparadas.

    Para obtener más detalles acerca de la escritura de seguro SQL, leer mi presentación La Inyección de SQL Mitos y Falacias.

    OriginalEl autor Bill Karwin

  2. 5

    Magic quotes son obsoleto. Apáguelos si se puede :).

    La segunda parte addslashes y mysql_real_escape_String hace casi el mismo (similar) de la cosa. Sólo trate de

    addslashes( '\')
    //and
    mysql_real_escape_string( '\')

    Debe ser el resultado de \\ así que si usted utiliza

     mysql_real_escape_string( addslashes( '\'))

    usted debe obtener \\ (o '\\\\' como cadena). Utilice sólo mysql_real_escape_string (mejor) O addslashes, nunca ambos.

    Recomiendo el uso de PDO en lugar de materias primas de funciones y manual de escape.

    OriginalEl autor Vyktor

  3. 3

    ¿Por qué desea aplicar htmlentities antes de guardar los datos a la base de datos? ¿Qué pasa si usted desea utilizar los datos para algo más que solo escribir a un navegador? Por ejemplo, para la búsqueda, partición de datos, utilizando los datos de otros lenguajes de programación, etc…

    La única cosa que usted realmente quiere aplicar es mysql_real_escape_string (o utilice PDO), nada más.

    Por lo general prefieren para deshacer los efectos de las magic quotes totalmente, siempre. Magic quotes es sólo engorroso trabajar con el y nunca debería haber sido inventado. He aquí un fragmento de la El manual de PHP para revertir la magic quotes:

    if (get_magic_quotes_gpc()) {
        $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
        while (list($key, $val) = each($process)) {
            foreach ($val as $k => $v) {
                unset($process[$key][$k]);
                if (is_array($v)) {
                    $process[$key][stripslashes($k)] = $v;
                    $process[] = &$process[$key][stripslashes($k)];
                } else {
                    $process[$key][stripslashes($k)] = stripslashes($v);
                }
            }
        }
        unset($process);
    }

    OriginalEl autor Emil Vikström

  4. 0

    la peor parte que la adición de barras no se desinfectan nada, no importa qué función se utiliza.

    y no debe ser utilizado en el medio de lo que sea «saneamiento».

    barras no «sanear» los datos. Barras de hacer escapar delimitadores de cadena sólo. Por lo tanto, la única de saneamiento, usted puede hablar de, se escapa y citando.

    De lo contrario, si usted no poner comillas alrededor de «limpio» de la cadena, usted no tendrá ninguna protección en absoluto.

    OriginalEl autor Your Common Sense

  5. -4

    Uso:

    mysql_real_escape_string()

    Esto evitará malos datos como la CAÍDA de la TABLA 😉

    esto es extremadamente incompentent respuesta. mysql_real_escape_string() no «evitar que los malos datos». Sin embargo, usted puede utilizar esta consulta de la inyección con una extensión mysql de todos modos

    OriginalEl autor Frederick Marcoux

Dejar respuesta

Please enter your comment!
Please enter your name here