sql >> Base de Datos >  >> RDS >> Mysql

Variable de usuario segura de PHP

Hay dos cosas muy importantes que debe hacer para evitar serios problemas de seguridad.

  1. Debe escapar de la entrada del usuario antes de incluirla en su consulta SQL. Escapar significa escapar de todos los caracteres especiales como '; por suerte, hay una función que ya lo hace automáticamente:mysql_real_escape_string .

    Si no escapa de la entrada del usuario, podrían suceder cosas desagradables. Imagine que su consulta es INSERT INTO userdata VALUES ('$user_data') . Ahora imagine que el usuario escribió '; DROP DATABASE userdata; .

    Si no lo escapa, su consulta se convertirá en:INSERT INTO userdata VALUES (''; DROP DATABASE userdata;') . Como puede imaginar, esto no es bueno:si tiene múltiples declaraciones habilitadas, puede despedirse de su base de datos. Esto se llama una inyección SQL ataque.

  2. Cuando está enviando su variable al usuario, también necesita reemplazar correctamente los caracteres especiales HTML con entidades HTML. Por suerte, también hay una función para hacerlo:htmlspecialchars() . Transformará los caracteres HTML especiales como < a < .

    Este parece ser un problema que a menudo se subestima, pero en realidad es muy grave. Imagina si $user_data contiene <script>SomeNastyScript()</script> . Podría explotar las vulnerabilidades existentes en el navegador de sus usuarios, o podría enviar una cookie que no sea HTTPOnly (que puede contener contraseñas guardadas) al atacante, o podría engañar al usuario para que escriba su contraseña en un formulario generado a través de la manipulación de el DOM (posible en javascript), o muchas otras cosas malas.

    Esto se llama XSS (secuencias de comandos entre sitios).

Versión corta

  1. Llame a mysql_real_escape_string en la cadena antes de insertarla en su consulta SQL (pero no cuando echo eso).

  2. Llamar a htmlspecialchars en la cadena antes de mostrársela al usuario (pero no cuando la coloca en la base de datos).