una para optimizar lentas lenta grandes datos cuello consultas consulta como cantidades botella avanzadas agilizar mysql oracle security

para - optimizar consulta en mysql



¿Qué necesito para escapar cuando envío una consulta? (11)

Cuando ejecuta una consulta SQL, debe limpiar sus cadenas o los usuarios pueden ejecutar SQL malicioso en su sitio web.

Normalmente solo tengo una función escape_string (blah), que:

  • Reemplaza escapes ( / ) con escapes dobles ( // ).
  • Reemplaza las comillas simples ( '' ) con una comilla simple escapada ( /' ).

¿Es esto adecuado? ¿Hay un agujero en mi código? ¿Hay una biblioteca que pueda hacer esto de manera rápida y confiable para mí?

Me gustaría ver soluciones elegantes en Perl, Java y PHP.


En la consulta de MySQL, al usar LIKE, también asegúrese de escapar de los caracteres "_" ya que mysql_real_escape_string no lo escapa.

Como referencia, consulte aquí


¡Utilice consultas preparadas / parametrizadas!


¿Qué idioma están usando? Parece que casi todos ellos tienen funciones de escape SQL integradas que sería mejor usar.

Por ejemplo, PHP tiene mysql_real_escape_string y addslashes .


En PHP, estoy usando este y agradeceré cada comentario al respecto:

function quote_smart($valeur) { if (get_magic_quotes_gpc()) $valeur = stripslashes($valeur); if (!is_numeric($valeur)) $valeur = mysql_real_escape_string($valeur); return $valeur; } $IdS = quote_smart($_POST[''theID'']); $sql = " SELECT * FROM Students WHERE IdStudent={$IdS}; ";

Necesita una verificación más si un campo puede ser NULL:

$picture = NULL; $theidyouwant = 7; $Name = ''WOOD''; if(is_null($picture)) $p = ''NULL''; else $p = "''".quote_smart($picture)."''"; $IdS = quote_smart($theidyouwant); $requete = "SELECT * FROM Students WHERE IdStudent={$IdS} AND PictureStudent={$p} AND NameStudent=''{$Name}''; ";

Eso es, ¡disfruta! (Espero que la publicación envíe correctamente guiones bajos y no & # 95;)


Es mejor utilizar declaraciones preparadas con marcadores de posición. ¿Está usando PHP, .NET ... de cualquier manera, las declaraciones preparadas proporcionarán más seguridad, pero podría proporcionar una muestra.


No estoy seguro si MySql admite consultas parametrizadas, de ser así, debería hacer un esfuerzo para seguir esta ruta. Esto asegurará que la entrada de los usuarios no pueda hacer nada malicioso.

De lo contrario, algunos caracteres "malos" además de los que mencionó serían punto y coma (;) y comentarios (- y / * * /).


También me escaparé de los comentarios (doble guion)

--


Una gran cosa para usar en PHP es el PDO . Se requieren muchas conjeturas al tratar de asegurar su SQL (y todas sus cosas de SQL en general). Admite declaraciones preparadas, que contribuyen en gran medida a frustrar los ataques de inyección de SQL.

Se incluye una excelente introducción a PDO en el libro The PHP Anthology 101 Essential Tips, Tricks & Hacks de Davey Shafik, etc. 2nd Ed . Facilita el aprendizaje y es excelente como referencia. Ni siquiera tengo que pensar en nada más que en la consulta SQL real.


Use declaraciones preparadas.


la API C de MySQL tiene su propia mysql_escape_string() . Usarlo o su equivalente sería lo mejor.