Evitar la inyección de SQL en PHP [duplicado]

Posible duplicado:
¿Cómo escapar de cadenas en MSSQL usando PHP?

Estoy creando un sistema y necesito evitar la inyección de SQL. Estoy usando PHP y SQL Server 2008 R2. Básicamente, lo que me pregunto es si puedo usar:

mysql_real_escape_string

o hay uno específico para SQL Server. Se agradece cualquier comentario.

preguntado el 27 de agosto de 11 a las 17:08

Creo que la cadena de escape real de mysql debería ser suficiente para usted, aunque no estoy seguro, espere otras respuestas. -

@BookOfZeus, no, eso no es un engaño de esta pregunta, ya que no aborda MSSql -

@Rikudo Sennin, no, te equivocas. mysql_real_escape_string es la función que se utilizará con MySql, no con MSSQL -

@Ibrahim Azhar Armar, tienes razón. Este es un duplicado casi exacto. Debe haberse perdido este, pero ayuda. Gracias -

3 Respuestas

Sugeriría comenzar a usar PDO. de esta manera, puede usar una consulta parametrizada que se encargará de casi todo por usted, incluida la inyección SQL, además de que admite un RDBMS muy grande, incluido MSSQL.

Estos son algunos de los temas para comenzar.

http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/

http://www.php.net/manual/en/book.pdo.php

Respondido 27 ago 11, 21:08

Una solución aún mejor. - Fantasma de Madara

Gracias Ibrahim. Ahora para leer y usar PDO. De hecho, leí en algún lugar usando cadenas de escape no es realmente tan seguro. Gracias - Maxi

Sé que esta pregunta se hizo en 2011, pero a partir de 2013, PDO ya no es compatible con MSSQL. - chica

@ Andrew, en ninguna parte pude encontrar una fuente que mencione que PHP ya no es compatible con MSSQL, ni siquiera en el manual de PHP. de hecho, en el manual de PHP se menciona claramente que PDO es compatible con MSSQL, aquí está la fuente php.net/manual/en/ref.pdo-sqlsrv.php - Ibrahim Azhar Armar

Lo siento, publiqué eso cuando estaba un poco cansado antes, creo que mi intención era abordar que hay un montón de controladores que ya no son compatibles: PDO_BDLIB, PDO_ODBC, PDO_SQLSRV, MSSQL y SQLSRV están flotando, pero solo PDO_SQLSRV y SQLSRV todavía son compatibles / recomendados para Windows (creo). MSSQL es en realidad un controlador completamente separado de cualquier cosa que involucre PDO y nunca estuvo relacionado. Mi error. - chica

Tengo una calss que construí para mi proyecto, tal vez pueda ayudarte

    <?php

    class clean
    {
        public static function stripJS($input)
        {
            return preg_replace('/<script\b[^>]*>(.*?)<\/script>/is', "", $input);
        }

        public static function email($input)
        {
            return clean::stripJS(filter_var($input, FILTER_SANITIZE_EMAIL));
        }

        public static function noTags($input)
        {
            return strip_tags(clean::stripJs($input));
        }

        public static function dbIN($input)
        {
            return mysql_real_escape_string(self::stripJS($input));
        }

        public static function dbOUT($input)
        {
            return stripslashes($input);
        }
    }

$input = clean::dbIN($input);

    ?>

Respondido 27 ago 11, 21:08

No puede usar la función de escape específica de mysql.

Usa algo que se ocupe de parámetros enlazados.

Respondido 27 ago 11, 21:08

Está usando Microsoft SQL, no MySql - William T Wild

@WilliamTWild - Sí, lo son. ¿Cómo es que tantas declaraciones en esta respuesta son incorrectas? - Quentin

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.