Respuesta a un comentario sobre PHP: hablemos de seguridad
Un usuario acaba de enviarnos un comentario, preguntando porque falla lo siguiente (he eliminado las líneas con comentarios del comentario original)
- include('conexion.php');
- //Ejecucion de la sentencia SQL
- mysql_query("INSERT INTO medicamento (grupo, nombre,clave,formula,prioridad , presentacion, contenido,unidad_medida,existencia,nivel ) VALUES ($_POST[clave],$_POST[nombre],$_POST[grupo], $_POST[prioridad], $_POST[formula], $_POST[presentacion], $_POST[unidad_medida], $_POST[nivel], $_POST[existencia], $_POST[contenido])");
Más allá del problema obvio de la falla de comillas en los valores de la query, alrededor de los $_POST, lo más grave es la posibilidad de hacer una inyección SQL feroz.
¿Cúal es la idea? La mayoría de los lenguajes SQL aceptan el ';' como fin de comando. Por tanto, arreglado el tema de las comillas, si en $_POST['contenido'] pusieramos
';) DELETE FROM medicamento; --, podríamos borrar tranquilamente todos los datos de la tabla.
¿Qué se puede hacer? Lo más sencillo es escapar las comillas ingresadas dentro de las variables enviadas. Más paranoico, pero no por ello menos útil, es buscar en las variables enviadas por los usuarios sentencias SQL, para banear la IP o enviarle mensajes amables del tipo "Si sigues haciendo inyección, te mato a la madre!".
Para más información, pueden leer algunos papers en inglés sobre el tema de la inyección
- 3339 lecturas

A veces con un chiste es una buena idea para entender algunas cosas:
http://xkcd.com/327/ (en inglés)
Jejeje, si lo había leído, es rebueno.
Pero si esa consulta es todo un mostrario de COMO NO DEBE SER UNA CONSULTA
Primero lo de la Inyeccion SQL
Segundo Validar Datos
Tercero Control de datos entrados
que tal que el campo fecha espere aa/mm/dd y el dato vaya dd/mm/aa
que tal si el medicamento DEBA existir, debe ser validado antes
que tal que un campo este definido para maximo 16 letras ?? y se le pasen mas...
etc... en fin Validar antes de Meterlo. Tal cual como el uso del Condon :)
Enviar un comentario nuevo