A pesar de que las bases de datos poseen sus propios sitemas de seguridad, los scripts PHP pueden llegar a ser una entrada si no se toman las precauciones necesarias.
Un caso importante es el de los datos de conexión. Normalmente, una conexión es utilizada en todo el sitio, lo que supone centralizar los datos de conexión (nombre de usuario, contraseña, nombre del servidor, puerto, nombre de la base de datos, etc) en un mismo archivo que debería estar ubicado por fuera del DocumentRoot. De ésta manera no se podrá acceder a ese archivo a través del navegador de ninguna manera.
Otro método de acceso a la base de datos es a través del SQL injection, que consiste en incluir en las partes variables de una instrucción SQL valores que la modifiquen. Este acceso se hace a través de formularios.
Ejemplo:
Envío de datos desde un formulario a través del método POST
include '/config/conexion.php';
$rs = mysql_query("SELECT * FROM usuarios WHERE username = '$POST[username]' AND passowrd = '$POST[password]'");
if (mysql_num_rows($rs)) {
//succes
}
else {
//error
}
Es una consulta típica. Si completáramos el primer campo del formulario con algo como:
xxx' or 1 = 1
La sentencia final del SQL sería:
select * from usuarios where username = 'xxx' or 1 = 1 --' and password = ''
La cadena — indica el comienzo de un comentario en MySQL, por lo tanto, lo que el motor evaluará finalmente es:
select * from usuarios where username = 'xxx' or 1 = 1
La segunda condición siempre se cumple, por lo que siempre se ingresa al sistema.
Hay muchas maneras de realizar este tipo de ataques, que pueden ser neutralizados filtrando las variables de la consulta con la función mysql_real_escape_string (disponible únicamente para MySQL):
$username = mysql_real_escape_string($_POST[username]);
$password = mysql_real_escape_string($_POST[password]);
...
...
select * from usuarios where username = 'xxx\' or 1 = 1 --' and password = ''
En el próximo post voy a hablar sobre cómo filtrar datos de entrada y salida. La importancia de la validación de datos que ingresan a la aplicación desde el exterior, como el envío de formularios, carga de archivos o el acceso a servicios web.
VN:F [1.9.12_1141]
Rating: 5.0/5 (2 votes cast)
VN:F [1.9.12_1141]
Rating: +2 (from 2 votes)