miércoles, 30 de mayo de 2012

Limitar acceso por URL

Limitar acceso por url

Hay veces en las que queremos limitar el acceso por url, por ejemplo cuando tenemos un index y desde el tomamos varias secciones de código desde otros documentos pero no queremos que esos otros documentos sean accesibles de forma directa, no siempre encontramos la forma y en esta ocasión les traigo una de las tantas formas aunque no sea la única pero que resulta bastante útil y rápida de realizar.

En principio en el documento que incluye a los restantes documentos sea el index.php o el que sea (mediante include o require o como sea que se traiga la información) debe colocarse lo siguiente:

<?php
define("_access", TRUE);
?>

Ahora para las páginas que queramos proteger se debe colocar lo siguiente:

<?php
if(!defined("_access")) {
  die("Error: No tienes permiso para acceder aqu&iacute;...");
}
?>


Lo anterior sirve para asignar un valor vacío (o FALSE) y esto indica que SI el valor es falso entonces detiene el script y muestra el mensaje de error diciendole que no tiene autorización para ver ese documento, se que hay muchas formas de hacer esto, algunas con clases que tienen todo un arsenal de seguridad y otras que son bastante simples y básicas como es simplemente decirle al incauto visitante VOS NO TENES PERMISO PARA VER ESTO y listo...

En ocasiones la simplicidad de un script hace que se vuelvan mucho mas comprensibles a la hora de desarrollar un programa y no complicarse la vida con, por ejemplo, sistemas muy pesados o que requieran demasiados procesos para hacer lo mismo que se logra con estas 3 simples lineas de código, una que le dice que "si" puede ver el documento y otra que le dice que no y le muestra un mensaje al respecto.


Este script se podría personalizar reemplazando "die" por un "header" para redirigir al visitante a una página de error personalizada o también se podría agregar el html directamente dentro de "die("aca todo el html que se te antoje");


Bien, esto fué todo por hoy, espero la próxima traer algo de mayor interes!!

sábado, 19 de mayo de 2012

poo php y mvc

POO PHP Y MVC

Hace unos meses estoy incursionando mucho en un patrón de diseño llamado MVC, después de haber aprendido muchas cosas sobre lo que es un patrón de diseño caigo en la cuenta de que aprendí lo básico de la programación orientada a objetos y me decidí a incursionar aún mas sobre este tema atrapante y misterioso llamado POO...

Ahora me encuentro con una "RECETA DEL POSTRE PERFECTO" como me gusta llamarlo, no entiendo mucho de diseño gráfico y el mantener lejos el código del diseño me facilita muchisimo las cosas por lo que MVC me representa una clara facilidad de mantenerme LEJOS del diseño como si me diera alergia o algo por el estilo y tener mayor posibilidad de hacer ALGO sin luchar demaciado de la parte visual.
Luego de haber aprendido los "como y porque" del patrón de diseño MVC me di cuenta que no era muy fácil extender el script a menos que incursionara en singleton y otras cosas que yo, al ser un pobre NEÓFITO en la materia no entendía muy bien pero me encontré con algo llamado clase... casualmente el fuerte de la orientación a objetos es el utilizar clases y objetos y extender clases me resultó particularmente extraño pero a la vez ÚTIL por lo que lo fui incorporando a mis conocimientos y me ayudó, por fin, a comprender MVC desde adentro y no solo PARA QUE SIRVE sino COMO FUNCIONA y ahí es donde viene la otra parte super interesante que es tener mas posibilidades dentro del script a crear y me di cuenta que simplemente extendiendo las clases se logran muchas cosas y no se rompe el patrón de diseño... antes los controladores (por no saber) los hacia simplemente con funciones que llamaban métodos de clases pero de a poco fui tomando nuevos conocimientos y me di cuenta del potente script que estaba generando... la pregunta es... POO lenguaje PHP y patrón de diseño MVC...

¿SON LA RECETA PERFECTA?

martes, 1 de mayo de 2012

Login en PHP

Login en php - Características deseables:

Ayer hablando con un amigo le pregunté sobre ¿¿QUE PUEDO ESCRIBIR??, este buen amigo mio me dijo "...toba, colgate un buen sistema de logueo...", pero como no tengo ninguno a mano que esté 100% funcional se me ocurrió enumerar algunas características "deseables" en todo sistema de login que se merezca mis respetos (en si, que es lo que yo desearía para un sistema completo de registro de usuarios).

En primer lugar lo mas deseable por un diseñador no es lo mas deseable por un programador, por ejemplo un programador ni se fija si el formulario queda lindo o feo... o si queda bien encuadrado en su lugar o si utilizar un checkbox o un select, sino que se fija en determinadas características que todo sistema de login debe tener (al menos bajo mi punto de vista).

Es bajo el enfoque de un programador que voy a realizar este post tratando de enumerar características deseables de un sistema de logueo.

1.- Ingreso mediante correo electrónico o usuarios segun el usuario quiera loguearse con su correo o con su nombre de usuario.


2.- encriptado de claves seguro (si es doble encriptado y utilizando semillas es mucho mejor).


3.- Activación de cuentas por email y/o número ID.

4.- Recuperación de contraseña facilmente mediante el ingreso de usuario y/o correo electrónico y que envíe un correo electrónico de reactivación previo cambiar la clave por una clave aleatoria y asignar un código de activación/reactivación


5.- La conexión a la base de datos debe realizarse mediante una clase abstracta ya que nunca se sabe cuando será necesario cambiar nuestro servidor de bases de datos).
(gracias GRAN "J")


6.- Los datos que vienen por el formulario (vía POST o GET) deben ser correctamente filtrados para proteger de inyecciones de código sql etc.


7.- Debe contar con una buena comprobación pero sin exederse para no ralentizar el proceso de registro.


8.- Si el sistema contendrá un perfil de usuarios, el registro debe ser lo mas simple posible para que luego sea el propio usuario quien actualice sus datos y no cometer el error de obtener todos los datos posible desde el registro ya que eso tiene desventajas y la principal es el tiempo que tardan en ser registrados los datos del usuario(esto por el proceso de filtrado y comprobaciones etc etc).


9.- También debe contar con un buen sistema de envío de email ya que no todos los hostings aceptan o mejor dicho no todos tienen habilitado ese servicio desde el servidor por lo que el sistema debe contar con algun sistema tipo phpMailer o parecido para asegurarnos de que "A PESAR" que el hosting no tenga habilitadas las características de email nosotros podamos enviar igual los correos de activación/recuperación y que podamos estar seguros de que llegan de la forma correcta sin sobresaltos (esto debe ser testeado ampliamente antes de er utilizado porque despues nos encontramos con problemas como que los correos los envian directo a la carpeta de no deseados)

Bueno, creo que esta listita de características deseables en un sistema de login en php son lo mas descriptivo que logré hacer, de echo me dijeron que para que quiero una clase abstracta si solo utilizo MySQL a lo que yo respondo que siempre hay algun marciano o algun androyde jeje

bien, espero alguna otra sugerencia si es que me olvidé de algo y ojala resulte útil esta listita para quien quiera crear un buen sistema de logueo que tenga en cuenta estas características a la hora de crearlo, se que pueden haber muchas mas características pero no se me ocurrieron!!

Gracias por tu lectura