- 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. - 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. - 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. - 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. - 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.
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.
martes, 25 de septiembre de 2007
Conexión por IP
Recientemente descubrí que es más rápido conectarse a un servidor utilizando su IP que su nombre. Por ejemplo, en vez de mysql_connect('localhost'); uno puede usar mysql_connect('127.0.0.1'); y termina mejorando la velocidad de conexión. Una pequeña optimización, pero frecuente.
domingo, 23 de septiembre de 2007
Guardar elementos de un array en una variable
El otro día, me llamó la atención leer que es más lento acceder a un elemento de un array que a una variable. Decidí probar cuanta es la diferencia, y si vale la pena. Mi conclusión es que la diferencia existe y si se llama más de 10 veces al mismo indice, puede valer la pena crear una variable para eso, pero igualmente sólo es recomendable hacerlo dentro de una función, en un "alcance" cerrado para que no quede en la memoria todo el tiempo.
Ver ejemplo
Ver ejemplo
jueves, 20 de septiembre de 2007
Leer el manual
Tengo que leer el manual
Tengo que leer el manual
Tengo que leer el manual
Tengo que leer el manual
Sí, es aburrido, pero hay que tener en cuenta que PHP cuenta con muchísimas funciones que quizás uno ignora y podemos evitarnos redescubrir la rueda.
También hay que leer los comentarios de los usuarios, muchos agujeros se tapan allí.
La última función que descubrí: dl
Tengo que leer el manual
Tengo que leer el manual
Tengo que leer el manual
Sí, es aburrido, pero hay que tener en cuenta que PHP cuenta con muchísimas funciones que quizás uno ignora y podemos evitarnos redescubrir la rueda.
También hay que leer los comentarios de los usuarios, muchos agujeros se tapan allí.
La última función que descubrí: dl
domingo, 16 de septiembre de 2007
Recorrer un array
Quizás suene reiterativo al post for - while, pero ahora en vez de ejecutar un código N veces, quiero recorrer todas las posiciones de un array. ¿Cuál es la forma más conveniente?
En primer lugar, tenemos el for optimizado.
Por otra parte, podemos utilizar el foreach, que justamente recorre el array de datos.
Una última alternativa es ir recorriendo el array utilizando su puntero interno.
En este caso, la mejor alternativa es el foreach, especialmente dedicado para esto.
Ver ejemplo
En primer lugar, tenemos el for optimizado.
Por otra parte, podemos utilizar el foreach, que justamente recorre el array de datos.
Una última alternativa es ir recorriendo el array utilizando su puntero interno.
En este caso, la mejor alternativa es el foreach, especialmente dedicado para esto.
Ver ejemplo
Suscribirse a:
Entradas (Atom)