Foros del Web » Programando para Internet » PHP »

PHP, DAO e inyección MSQL

Estas en el tema de PHP, DAO e inyección MSQL en el foro de PHP en Foros del Web. Hola a todos, Estoy desarrollando una aplicación en la que utilizo un patrón dao que me proporciona, para cada clase, una interfaz de: alta baja ...
  #1 (permalink)  
Antiguo 09/06/2013, 06:43
 
Fecha de Ingreso: agosto-2012
Ubicación: España
Mensajes: 6
Antigüedad: 7 años, 5 meses
Puntos: 0
PHP, DAO e inyección MSQL

Hola a todos,

Estoy desarrollando una aplicación en la que utilizo un patrón dao que me proporciona, para cada clase, una interfaz de:
alta
baja
consulta
modificacion

Vease, para un Usuario tengo los métodos

persistirUsuario
deleteUsuario
getUsuario
modificarUsuario

Hasta ahí todo bien, pues son todo parámetros estrictos, el tema es que a medida que crece la aplicación, necesito la posibilidad recuperar LISTAS de usuarios (por ejemplo, hablo de usuarios como podría hablar de productos, por ejemplo)

No hay problema en recuperar una lista global, pues es simplemente un método que los recupere todos, ahora bien, cuando quiero recuperar un usuario específico, vease, usuario cuyo correo sea "[email protected]", es cuando me encuentro con el problema, pues necesito un método que recupere usuario por correo exacto, esto sería viable si luego no me surgiese la necesidad de hacer un método que sea recuperar usuarios cuyo correo sea like "@gmail.com", pero me surge! Mi solución fue, en el dao, crear un método que sea findByCriterio, que ejecuta una consulta tal que SELECT * FROM Usuarios WHERE $criterio, esto me facilita todo, pues puedo recuperar listas u objetos simples, pero pierdo el control de la inyeccion que tenía con las sentencias preparadas para mi get delete persistir y modificar...

Se os ocurre alguna idea?

este sería el código de la operación del dao


function bddGetListaUsuariosByCriterio($unCriterio){

$dbconfig = new DBConfig();
$dbconfig = $dbconfig->db_connect();


$consulta = "SELECT id FROM ". TABLA_USUARIOS ." WHERE $unCriterio";

//Debug
if (DEBUG_QUERIES == true)
echo "<br /> DEBUG: " .$consulta . " <br />";


$resource = mysql_query($consulta);

$listaUsuarios = array();

if ($resource != false){
$i = 0;
while ($usuarioActual = mysql_fetch_assoc($resource)){
$unUsuario = getUsuario($usuarioActual['id']);
$listaUsuarios[$i++] = $unUsuario;
}
}

return $listaUsuarios;
}


Un saludo!

Carlos
  #2 (permalink)  
Antiguo 09/06/2013, 07:22
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 9 años, 4 meses
Puntos: 331
Respuesta: PHP, DAO e inyección MSQL

pero pierdo el control de la inyeccion que tenía con las sentencias preparadas para mi get delete persistir modificar...
puedes filtrar el Input del usuario en cualquier momento, además puedes evaluar que el criterio sea válido Antes de ejecutar la sentencia. No pierdes ningún control,´sólo debes implementarlo correctamente, saludos.
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 09/06/2013, 07:52
 
Fecha de Ingreso: agosto-2012
Ubicación: España
Mensajes: 6
Antigüedad: 7 años, 5 meses
Puntos: 0
Respuesta: PHP, DAO e inyección MSQL

Por supuesto, siempre puedo asegurarme que el usuario no meta basura en los inputs, pero eso hará la aplicación ilegible y todavía más ardua de lo que ya es! Busco una solución genérica y automática :/

Mi idea es, en la función dao, aplicar en el método getXByCriterio($unCriterio) una criba, es decir, buscar cosas tal que DROP, SELECT, DELETE, UPDATE, 1=1... pero hay taaaaaaantas formas por las que un usuario malintencionado puede tocar los bemoles, que lo veo también complicado....
  #4 (permalink)  
Antiguo 09/06/2013, 08:10
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 12 años
Puntos: 845
Respuesta: PHP, DAO e inyección MSQL

Y porque no utilizas PDO y Prepared statements ?
__________________
http://es.phptherightway.com/
thats us riders :)
  #5 (permalink)  
Antiguo 09/06/2013, 12:46
 
Fecha de Ingreso: agosto-2012
Ubicación: España
Mensajes: 6
Antigüedad: 7 años, 5 meses
Puntos: 0
Respuesta: PHP, DAO e inyección MSQL

Masterpuppet.

PDO o no PDO, seguiría teniendo el mismo problema, lo que no es factible, es que, si mi clase tiene 20 atributos, deba generar criterios estamentados para los 20, y si encima hablamos de que quiero también poder utilizar criterios combinados...
  #6 (permalink)  
Antiguo 09/06/2013, 13:09
Avatar de xalupeao  
Fecha de Ingreso: mayo-2008
Ubicación: Santiago, Chile
Mensajes: 749
Antigüedad: 11 años, 8 meses
Puntos: 12
Respuesta: PHP, DAO e inyección MSQL

Y si usas doctrine2, en donde tus DAO serian los Repository

http://www.doctrine-project.org/
__________________
Hosting en Chile en Silverhost - La solución en Hosting en Chile.

Etiquetas: dao, inyección, msql, mysql, select, tabla, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:54.