Noticias 

Cuestiones relacionadas con la seguridad y LOAD DATA LOCAL

El comando LOAD DATA puede cargar un fichero que esté localizado en el equipo servidor, o puede cargar un fichero localizado en el equipo cliente cuando se especifica la palabra clave LOCAL.
Hay dos aspectos de seguridad potenciales al soportar la versión LOCAL de los comandos LOAD DATA:
  • La transferencia del fichero desde el equipo cliente y el equipo servidor se inicia mediante el servidor MySQL. En teoría, muy bienpuede construirse un servidor modificado de forma que le diga al programa cliente que transfiera un fichero elegido por el servidor en lugar de el fichero especificado por el cliente en el comando LOAD DATA . Tal servidor podría acceder a cualquier fichero en el equipo cliente al que el usuario cliente tuviese acceso de lectura.
  • En un entorno Web en el que los clientes se conecten mediante un servidor Web, un usuario podría usar LOAD DATA LOCAL para leer cualquier fichero al que el servidor Web tuviese acceso de lectura (asumiendo que el usuario puediese ejecutar cualquier comando contra el servidor SQL). En este entorno, el cliente respecto al servidor MySQL es el servidor Web, no el programa ejectuado por el usuario para luego conectar al servidor Web.
Para tratar estos problemas, hemos cambiado el funcionamiento de LOAD DATA LOCAL en MySQL 3.23.49 y MySQL 4.0.2 (4.0.13 en Windows):
  • Por defecto, todos los clientes MySQL y bibliotecas en distribuciones binarias se compilan con la opción –enable-local-infile para ser compatible con la versión MySQL 3.23.48 y anteriores.
  • Si compila MySQL de los ficheros fuentes pero no usa la opción –enable-local-infile para configure, LOAD DATA LOCAL no puede usarse por ningún cliente a no ser que se escriba explícitamente para invocarmysql_options(… MYSQL_OPT_LOCAL_INFILE, 0). Consulte Sección 24.2.3.44, “mysql_options()”.
  • Puede desactivar todos los comandos LOAD DATA LOCAL desde el lado del servidor arrancando mysqld con la opción –local-infile=0.
  • Para el cliente de línea de comando mysql, LOAD DATA LOCAL puede activarse especificando la opción –local-infile[=1] , o deshabilitarse con la opción –local-infile=0 . De forma similar, para mysqlimport, las opciones –local o -L permite la carga de datos locales. En cualquier caso, el uso exitoso de una operación de carga local requiere que el servidor lo permita.
  • Si usa LOAD DATA LOCAL en scripts de Perl scripts u otros programsa que lean del grupo [client] en los ficheros de opciones, puede añadir la opción local-infile=1 a ese grupo. De todos modos, para evitar que esto cause problemas en programas que no entiendan local-infile, especifíquelo usando el prefijo loose- :
    [client]
    loose-local-infile=1
  • Si LOAD DATA LOCAL INFILE está desactivado, tanto en el servidor o el cliente, un cliente que trate de ejecutar dicho comando recibe el siguiente mensaje de error:
    ERROR 1148: The used command is not allowed with this MySQL version
Fuente:enlace

Entradas relacionadas