¿Cuáles son las mejores maneras de protegerse de MySQL injection? ¿Cuáles son las debilidades que debo fijarme?

Yo sé lo que es, pero realmente no tengo idea de lo vulnerable que puede ser. A pesar de que he tomado (lo que yo creo ser) pasos hacia la protección de mí mismo y de mi base de datos.

Hay alguna manera del seguro-fuego de detener a alguien?

Por CIERTO…voy a escribir en PHP:)

OriginalEl autor johnnietheblack | 2009-02-13

7 Comentarios

  1. 8

    No confíes en nadie!

    Desinfectar todas las entradas — filter_var() o expresiones regulares o in_array() de valores válidos o una estrategia mixta dependiendo del tipo de datos.

    De»entrada» se entiende cualquier fuente de entrada que no controlar directamente, no sólo las formas!

    Desinfectar cualquier cosa que usted regrese de $_GET, $_POST, $_SESSION, $_COOKIE — cualquier cosa que podría tener alguna posibilidad de ser contaminados.

    Y

    Uso de declaraciones preparadas

    $_SESSION? No es que los datos almacenados, escribir y leer en el servidor?
    Yup. Y muchos sitios están alojados los servidores compartidos … no confíes en nadie.

    OriginalEl autor PartialOrder

  2. 1

    Tienes que desinfectar todas las entradas.
    Cómo se puede hacer esto depende de la programación languaguage y/o marco en que está trabajando.

    edición:

    Si está usando php la función que se busca es la mysql_real_escape_string($cadena). Usted debe usar y que en todo lo que recibimos de el cliente el que debe ir en la base de datos.

    lo siento por ser claro…yo uso PHP
    No utilice nunca escapar a menos que absolutamente no puede evitarlo. El escape de las funciones pueden ser, y han sido, buggy, permitiendo que las inyecciones de deslizarse a través de. Es prácticamente imposible que el DB ejecutores para hacer este tipo de error con parametrizada declaraciones, por lo tanto, son más confiables.
    Habiendo dicho eso, si DEBE utilizar secuencias de escape (significado mysqli_* está fuera de la cuestión por el motivo que sea), mysql_real_escape_string es, de hecho, el camino a seguir.

    OriginalEl autor tliff

  3. 1

    Si usted no está usando un marco de trabajo que proporciona desinfección de las herramientas de PHP ha construido en la cadena de escaper, usted debe comenzar allí. Usted puede encontrar la documentación en que dentro del PHP docs para mysql verdadero escape de la cadena de. Si usted mira el ejemplo de tres vas a obtener una buena idea de los conceptos básicos que puedes seguir.

    Otro método que sigue es para asegurarse de que yo echo de variables donde corresponda. Por ejemplo, si estoy esperando a la entrada de un usuario que ser un número entero de que voy a hacer lo siguiente:

    $age = (int)$age;

    También si una columna se supone que se limita a uno o dos valores (por ejemplo, una columna de género) asegúrese de cumplir que en su PHP antes de ponerla en la base de datos.

    OriginalEl autor Parrots

  4. 1

    Esto puede parecer de sentido común, pero me fue disparado para arriba en él por un tiempo.

    Hay una diferencia entre codificación htmlentities() y escapar mysql_real_escape_string(). Yo estaba pensando en ellos como bastante intercambiables. Sin embargo, no se… como que dicta el sentido común le dirá. 🙂 Por lo general, es mejor aplicar tanto, como primera codificar, luego de escapar.

    Entonces cuando la extracción de los datos de invertir el proceso, unescape(si es necesario) luego unencode. Nota específicos en la forma en que los pasos que se llevan a cabo (y a la inversa) va a ahorrar un montón de dolores de cabeza y de doble escapar de los problemas.

    OriginalEl autor null

  5. 0

    Una señal de que usted podría tener un problema estaría tomando la entrada del usuario directamente y poner en el comando SQL.

    Por ejemplo, que le pide su nombre de usuario. Si usted lo toma y, a continuación, simplemente decir

    «Select * From users where Username = ‘$USERNAME’;»

    El usuario puede agregar «JOE’; Drop Table…» y así sucesivamente.

    En perl usted puede decir algo como

    my $sth2 = $dbh->prepare("Insert Into HostList (HostName,PollTime,Status) values (?,?,?);");
    $sth2->execute($Hostname,$myDate,$Status);

    El método execute, a continuación, busque ataques como el de arriba y el de escapar de ella correctamente.

    OriginalEl autor Rob Haupt

  6. 0

    Yo uso esta función de PHP en todas las entradas antes de intentar utilizar cualquier código (consulta de MySQL, visualización de datos, etc.). Probablemente no está completa, pero debe detener todos los intentos de hackear el sistema:

    //$linkID is the link ID of the connection to the MySQL database
    function clean_input($input)
    {
        GLOBAL $linkID;
        if(get_magic_quotes_gpc())
        {
            //Remove slashes that were used to escape characters in post.
            $input = stripslashes($input);
        }
        //Remove ALL HTML tags to prevent XSS and abuse of the system.
        $input = strip_tags($input);
        //Escape the string for insertion into a MySQL query, and return it.
        return mysql_real_escape_string($input,$linkID);
    }

    OriginalEl autor Andrew Ensley

Dejar respuesta

Please enter your comment!
Please enter your name here