Contenido principal

PHPLockPages: Protege el acceso a tus páginas

Septiembre 2, 2008


PHPLockPages, puede proteger tus scripts hechos en PHP de visitas no deseadas por medio de varios sistemas de autenticación.

La aplicación incluye autenticación básica, por medio de base de datos y propio código PHP guardando los datos del usuario por medio de sesiones o de cookies.
Da la posibilidad de mostrar mensajes detallados acerca de los datos proporcionados por el usuario, mostrar errores personalizados, contiene un módulo de seguridad extra, tres tipos de configuraciones aplicados a las contraseñas, tales como contraseñas en texto plano, cifradas por medio de funciones que trae por defecto PHP o por medio de la librería 'hash'.

El sistema funciona bloqueando el script PHP, hasta que un usuario con su respectivo nombre de usuario, clave y nivel este habilitado al ingreso de dicho script.

Forma de uso:
El paquete contiene diez archivos, cinco de ellos en una carpeta llamada 'PHPLockPages_01'.
Los archivos y sus respectivas funciones son:

secure.php
Es un pequeño archivo que contiene el ejemplo de uso de la aplicación.
Al archivo que se quiere proteger, se le debe agregar dos o más líneas de código según lo amerita la situación.

Usuarios con cualquier nivel

<?php
  define('PRINC',1); //Necesario para incluir los demás archivos
  include('PHPLockPage.php'); //Se incluye el archivo que contiene las configuraciones
?>
Esto es una prueba

El mensaje "Esto es una prueba", será mostrado luego de que el usuario este autorizado a verlo.

Usuarios con el mínimo de nivel

<?php
  define('PRINC',1); //Necesario para incluir los demás archivos
  $nivel[0]=4; //El usuario debe tener un nivel mayor o igual a 4 para poder acceder
  include('PHPLockPage.php'); //Se incluye el archivo que contiene las configuraciones
?>
Esto es una prueba

Usuarios con niveles permitidos

<?php
  define('PRINC',1); //Necesario para incluir los demás archivos
  $nivel[1] = array(0,1,2,90); //El usuario debe tener un nivel de 0,1,2 o 90 para poder acceder
  include('PHPLockPage.php'); //Se incluye el archivo que contiene las configuraciones
?>
Esto es una prueba

PHPLockPage.php
Este archivo es el encargado de cargar todas las configuraciones necesarias para que la aplicación tenga un correcto funcionamiento.

error_reporting(E_ALL);

Es una función que permite al usuario configurar la muestra de errores relacionadas al código PHP, por defecto se encuentra en "0" para no mostrar ningún error. Si la aplicación contiene algún error, o por causa desconocida no funciona, se debe poner a "E_ALL" para poder entrar en modo de depuración y poder así saber que es lo que ocurre.
Para consultar más sobre esta función: http://www.php.net/manual/es/function.error-reporting.php
Esta función es la mas importante en este archivo, porque permite ocultar los errores que genera la aplicación, las demás configuraciones estan comentadas.

generador.php
Se encarga de generar las claves, para una mayor portabilidad. Las funciones criptográficas deben ser definidas en el código fuente.

arch_ident.php
Es el principal archivo, ya que contiene todas las funciones de autenticación de la aplicación. Si se quiere modificar, se debe tener cuidado en que es lo que se está modificando, ya que cualquiera cambio puede afectar el funcionamiento del sistema.
Lo innovador de este script es que permite a una versión de PHP que no soporta httpOnly, enviar la cookie con la propiedad activada. La forma en que la envia es:

header('Set-Cookie: nombre=valor; expires='.gmdate('D, d-M-Y H:i:s',time()+1800).' GMT; httpOnly');

Y las sesiones son un poco mas seguras, al ponerles un nombre que combina la cabecera User-agent con la IP del usuario que hace petición de conexión al script. De esta forma:

$sec = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'PHPLockPages';
$sec = md5(base64_encode($_SERVER['REMOTE_ADDR'].$sec));
session_set_cookie_params($conf['tiempo_cs']);
session_name($conf['nombre_cs']);
session_id($sec);
session_start();

espanol.php
Es el archivo que contiene el idioma. Se puede cambiar desde PHPLockPage.php por medio de la variable $conf['lenguaje'].
El paquete solo contiene el lenguaje español.

funciones_sec.php
Contiene las funciones extra de seguridad. Es un script pequeño, pero puede resultar efectivo.
Lo que hace es recorrer todas las variables GET, POST y COOKIES, y pasarlas por un filtrado. Este filtrado se compone de dos funciones:
addslashes, que antepone backslashes (\ o barras invertidas) a los caracteres que son usados comúnmente en consultas a bases de datos, esto para evitar las inyecciones SQL.
Y la función htmlentities, la cual representa los caracteres especiales como entidades HTML. Algunos de estos caracteres son " ' < > espacio & enter tabulador.

vista.php
Este archivo contiene la parte gráfica de la aplicación.

index.php
Es para que los servidores no listen los directorios. Es útil si queremos que nadie sepa que contiene nuestro directorio web, o alguna carpeta en especial. Redirige a la página principal de sinfocol.

Los usuarios se deben ingresar manualmente, para evitar hacer archivos que se comuniquen con la base de datos, ya que podría ser vulnerable.

Los siguientes son los pasos para generar la tabla con phpMyAdmin, para el modo de autenticación mediante base de datos.

Iniciamos sesión con phpMyAdmin, y le damos en la ventana de consulta

Luego nos abre la ventana de la consulta, y en ella copiamos el siguiente código

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

CREATE TABLE `server_auth` (
`ID` int(5) NOT NULL AUTO_INCREMENT,
`n_usuario` text NOT NULL,
`l_clave` text NOT NULL,
`e_nivel` tinyint(4) NOT NULL,
`h_ipremota` varchar(15) NOT NULL,
PRIMARY KEY  (`ID`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

Luego le damos en continuar, y se crea la tabla con los campos necesarios para la ejecución de la aplicación mediante la autenticación por base de datos.

Para agregar valores se selecciona la base de datos 'PHPLockPages', se selecciona la tabla 'server_auth', luego en 'insertar', y después se insertan los datos deseados.

Cabe también decir, que la clave debe ser primero generada con el generador.php, si y solo si se van a utilizar funciones criptográficas. Si no se van a utilizar las funciones criptográfica para asegurar la clave (Esto es que vamos a usar claves en texto plano), se ingresa la clave normalmente.

El demo de la aplicación se encuentra en este LINK.
El usuario es "Anonimo" y la clave "anonimo2008".

Nota: Tanto el nombre de los usuarios como la clave son case-sensitive. Esto es que se distinguen las mayúsculas de las minúsculas.

El paquete, con todos los archivos se puede descargar de ACÁ

La clave del archivo comprimido es

www.sinfocol.org

Cualquier duda, sugerencia, o error en el código, por favor enviarla a

Archivado en: Programación, Seguridad |

9 comentarios

  1. Boris Navas Julio 22, 2010 @ 8:05 am

    Hola un cordial saludo desde Valencia Venezuela
    hasta ahora no e encontrado un login mas seguro que el de ustedes, estoy haciendo un sistema en PHP con base de dato en Mysql y copie el archivo PHPLockPages por la seguridad para la entrada del usuario pero todavía no a corrido bien porque no logro que se conecte con la base de dato. estoy trabajando con el paquete lampp para software libre y mysql 5.
    Gracias. hasta pronto

  2. Sysroot Julio 22, 2010 @ 7:20 pm

    Hola Boris, gracias por escribir, igualmente me da pena contigo por el código tan mal estructurado.
    Para lograr la conexión con la base de datos debes primero crear una base de datos llamada PHPLockPages, y a continuación ejecutar la sentencia para crear la tabla server_auth.
    Asegúrate también de que uses los datos correctos del servidor como son usuario, contraseña, ip y puerto en la que corre el servicio del MySQL.
    Me puedes indicar qué error te genera el sistema para tener una visión más clara de tu problema?
    Gracias.

  3. Azther Nezkratd Mayo 15, 2011 @ 1:31 pm

    Hola un saludo desde México, quería agradecer este gran aporte que me ha servido muchísimo ya que es una gran herramienta de seguridad, de igual manera escribo este comentario para preguntar bajo que licencia esta publicada la herramienta, ya que quisiera adaptarlo como una extensión de joomla! y quería saber si es posible modificar su código sin infringir algún derecho de autor.
    De ser posible envienme un correo a jesusr_2@yahoo.com.mx
    Por el momento gracias.

  4. led Enero 24, 2012 @ 6:51 pm

    gracias por el aporte me fue de mucha utilidad

  5. emersongonzal Marzo 28, 2012 @ 2:36 pm

    hola excelente aporte pero tengo un problemilla a cada pagina que he protegido necesito extraer el nombre del usuario o el id para poder identificar quien realiza acciones dentro de unas paginas especificas del sistema
    gracias por la ayuda

  6. emersongonzal Marzo 28, 2012 @ 5:20 pm

    hola me respondo a mi mismo ya lo logre solo envio la variable en el archivo arch_ident.php.

    tengo una pregunta se podria usar este aplicativo en una base de datos diferente a la del ejemplo??? la verdad no he encontrado donde se selecciona la base de datos... en la conexion no esta para decirle que base de datos usar

  7. alesito Enero 31, 2015 @ 4:07 pm

    muy buenas, perdonaras mi torpeza pero tengo alguna duda a la hora de isertar en la tabla. En la parte de funcion de los diferentes columnas se pone algo? y en valor de e_nivel y h_ipremota? gracias de antemano

  8. Mariano Febrero 4, 2015 @ 12:53 pm

    Buenas tardes, estoy copiando esto en todas las paginas que quiero proteger que tengo mas carpetas diferentes para cada tipo pero cuando la abro me dice que falla

    Warning: include(PHPLockPage.php): failed to open stream: No such file or directory in C:\xampp2\htdocs\fe\form1.php

    E incluyo esto en la cabecera

    Estoy ingresando directo a la carpeta FE por internet y no me pide la autentificacion, la mia es por base de datos, otra cosa.. el index.php en raiz si lo coloco me redirecciona automaticamente a la autenticacion pero si entro a la carpeta FE me aparece el contenido con el error de WARING.

    Gracias

  9. tecmobeto Noviembre 29, 2015 @ 11:08 pm

    Gracias viejo, me sirvio mucho, muy bien estructurado, fantastico script

    saludos desde mexico

Deja un comentario