domingo, 30 de septiembre de 2007

Procesamiento de formularios

Siempre, el mayor problema, es procesar datos que se envían. Vamos a hacer un seguimiento de que cosas hay que revisar para cada formulario. Como noción previa, tenemos que tener en cuenta que todos los datos que envía el client (POST, GET, COOKIE) poco confiable.
  1. Revisar el permiso del usuario
    No todos los usuarios tienen permisos para todos los formularios, eso es claro. Hay que establecer si el usuario puede enviar ese formulario o no, o si sólo lo puede hacer en parte.

  2. Validar todos los datos
    Significa que por cada formulario que se le pide, hay que establecer condiciones. En general, los campos de texto tienen que tener un largo máximo (lo más normal es establecerlo de acuerdo a la base de datos) o fijo (por ejemplo, los códigos de tarjetas de crédito). También hay que revisar el formato (usualmente para las direcciones de e-mail). Hay datos que sólo pueden ser numéricos, o fechas que pueden no ser válidas.
    Los checkbox, radio buttons y dropdowns tienen un rango de opciones prefijados y no se pueden salir de ellos.
    Todas estas cosas hay que tenerlas en cuenta, porque un dato erróneo puede hacer que se pierda información, pero se puede evitar si se le fuerza al usuario a corregir ese error.

  3. Escapar datos
    Dependiendo el destino de los datos ingresados, hay que escapar los datos de la forma que corresponda. En general, vamos a guardarlos en bases de datos, por lo que las funciones *_escape_string nos proveen una forma fácil de escapar los datos de acuerdo al tipo de base de datos que usemos.
    En este punto, hay que tener cuidado con las "comillas mágicas" (magic_quotes_gpc), que si están habilitadas pueden hacer que los datos sean doblemente escapados. Lo mejor es quitar las comillas, si esta directiva está en funcionamiento.
    ¿Por qué no nos olvidamos de escapar datos si tenemos magic_quotes_gpc?
    La idea de magic_quotes era no tener que escapar datos, y facilitarle la tarea al programador. El problema de esta función, es que escapa datos en forma arbitraría y sin tener en cuenta en donde se utilizan los mismos.
    Otro posible error es querer guardar datos que no envió el usuario, pero por tener magic_quotes_gpc On no escapamos, incorrectamente.

  4. Guardar los resultados
    Los datos son válidos, están preparados... Lo único que queda es guardarlo, y hacer cualquier otro proceso que sea necesario.

  5. Mostrar los resultados
    Todavía no terminó nuestro trabajo. La información que guardamos, probablemente la queramos mostrar a alguien. En este punto es muy importante escapar los datos nuevamente. Anteriormente los guardamos tal cual lo mandó el usuario, pero a la hora de mostrarlo en una página, hay que evitar que se haya podido ingresar información malisiosa. En general, escapar las entidades HTML es suficiente para esto, pero sería mejor escapar todas las entidades, incluso las más "raras" para presentar correctamente la información.
Estos 5 puntos son necesarios para la mayoría de los procesamientos de datos. Parece engorroso y complicado, pero no lo es realmente.

1 comentario:

Nilson Ramirez dijo...

Me Gusta Tu Blog, Me GUstaria Aprender Php, Me GUstaria que me ayudaras viejo, Muchas Gracias Compadres,
mi correo nilsonramirez@gmail.com