Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

API PHP-SQL haciendo las querys mediante POST o GET

Estas en el tema de API PHP-SQL haciendo las querys mediante POST o GET en el foro de Bases de Datos General en Foros del Web. Hola gente, hace tiempo no posteaba en este foro pero hace poco tiempo empece con nuevas tecnologias como Ajax y Flex y me surgio una ...
  #1 (permalink)  
Antiguo 24/06/2009, 11:27
 
Fecha de Ingreso: mayo-2003
Ubicación: Mar del Plata
Mensajes: 373
Antigüedad: 21 años, 7 meses
Puntos: 0
API PHP-SQL haciendo las querys mediante POST o GET

Hola gente, hace tiempo no posteaba en este foro pero hace poco tiempo empece con nuevas tecnologias como Ajax y Flex y me surgio una idea que me parecio raro ( despues de mucho buscar por inet ) no encontrar solucion, pense que ya iba a estar armado algo parecido, pero o no supe buscar o realmente no existe.

Lo que quiero hacer no es nada sensillo, pero podria ahorrarme mucho tiempo a la hora de programar asi como a cualquier desarrollador de estas tecnologias nuevas.

Bueno me dejo de tanta chachara y voy al grano. Estoy tratando de hacer un WEB SERVICE, esto no tiene nada de complicado, pero mi idea es desarrollar una clase a la cual mediante POST o GET le envie los parametros de mi consulta en SQL y me devuelva el resultado en XML.

Hay varias cuestiones que ya tengo solucionadas por ejeplo, generar XML con una funcion a la cual le pasamos unos arreglos y nos devuelve el texto en xml perfectamente formateado asique por la impresion de los resultados no me complico tanto.
Pero como se imaginaran para la recepcion de los datos hay qu tener muchisimo cuidado con temas de seguridad, el sql injection es peligrosisimo y un descuido a la hora de programar nos puede costar caro.
Entonces pense lo siguiente, para no pasar directamente el string con la consulta SQL ( nuestraClase.php?query=SELECT * from blablabal) tendriamos algo como lo siguiente

Consideremos la siguiente tabla:

---------------------------------------------------------------------------------------
id | nombre | apellido | edad | domicilio
---------------------------------------------------------------------------------------
1 Pepe Lopez 40 calle inexistente 123
2 Jose Garcia 20 calle loca 145
---------------------------------------------------------------------------------------
Nuestra clase php entonces, va a recibir un post con las variables necesarias
y nos va a devolver los resultados, mediante XML para poder ser consumido
por un frontend en FLEX o AJAX.

En este momento no se fijen en la cuestion PERMISOS, es decir, si tal o cual usuario tiene permisos para eliminar modificar o cualquier otra operacion, eso se puede hacer luego, mi intencion es simplificar lo mas posible operaciones de la base de datos como para tener un modelo y copiarlo para despuess adaptarlo en cada ocacion.

accion: puede tomar los valores insert, delete, update, select
(dentro de nuestra clase mediante un switch preguntamos si la accion es tal o cual y vamos armando nuestra $sql_query dinamicamente.)
ej:

//antes de asignar el post a la variable lavalidamos para que solo se asignen valores : "insert" "delete" "update" "select"
$accion = $_POST['accion'];

switch($accion){
case 'insert':
insert();
break;
case 'delete':
delete();
break;
case 'update':
update();
break;
case 'select':
select();
break;
}

dependiendo el valor de $accion se ejecuta una u otra funcion.


//variable campos: en esta variable vamos a recibir el indice de los campos que queremos afectar por ejemplo en "SELECT id, nombre, apellido from ...."

$campos = _POST['campos']; //siempre validamos antes para que no nos hagan injection

campos: 1|2|3|4 (los campos que vamos a modificar, le pasamos solo los indices de los campos y luego dentro de nuestra clase parseamos el string mediante el separador | )
Para esto nos valdremos de mysql_list_fields, esta funcion nos devuelve un array de arrays con los nombres de los campos. Y tambien utilizaremos algoritmos propios para parsear el string pasado por HTTP vars.

//variable values: esta contendra los nuevos valores que van a tener los campos
en estas es dond debemos tener especial cuidado ya que los valores pueden ser muy variados y no predefinidos, casi como vienen del usuario, asi llegaran al string de consulta final, y cada uno de los valores tendra un numero N al final de la variable por ejempo

$values1 = _POST['values1'];
$values2 = _POST['values2'];
.
.
.
$valuesN = _POST['valuesN'];

Asi obtenemos todas las variables, por supuesto hay que validar todas los strings antes de tratarlos para evitar sql injection.

solamente tomaremos tantos valores como campos vamos a modificar, y esto lo estaremos delimitando por el lengt de el array de campos que hemos creado mas arriba con la variable $campos, aunque haya definidos mas valuesN que los campos que tenemos definidos estos no ejecutaran ninguna accion.

Bueno, esto es basicamente lo que me gustaria hacer, por supuesto definiriamos algunas constantes al principio de la clase como el nombre de la tabla a la que queremos acceder, y algunas otras que se vallan ocurriendo.

Mi pregunta despues de todo esta larga explicacion es: Mas alla de, el uso que se le valla a dar a esta clase, ( es decir da igual la finalidad si es para flex ajax o lo que sea ) es viable lograr un funcionamiento SEGURO, es decir evitar al maximo el sql injection? Se que es una clase que le esta dando acceso a todas las funciones de nuestra base de datos, es decir estamos jugando con fuego, pero creo que se podria lograr un buen nivel de seguridad, pero tal vez se me esten pasando algunas cuestiones .... Ustedes Expertos, que dicen ?
Saludos a todos !!!
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 01:19.