Diferencia entre revisiones de «Plantilla:PHP/Autentificacion»
De WikiEducator
(Página creada con « ===Qué es autentificarse=== *Por autentificarse vamos a entender un mecanismo por el cual el servidor web puede estar relativamente confiado en que está siendo consulta...») |
(→protocolo http vs https) |
||
Línea 18: | Línea 18: | ||
+ | {{TEP}} | ||
===protocolo http vs https=== | ===protocolo http vs https=== | ||
*Este es un concepto importante | *Este es un concepto importante | ||
*La seguridad del envío de datos es otro aspecto diferente del tema de la autentificación | *La seguridad del envío de datos es otro aspecto diferente del tema de la autentificación | ||
*En seguridad entre otros aspectos tenemos | *En seguridad entre otros aspectos tenemos | ||
− | #'''''La autentificación''''' mecanismos por los cuales podemos confiar en que quien se ha identificado es conocido para el sistema | + | #'''''La autentificación''''' mecanismos por los cuales podemos confiar en que quien se ha identificado es conocido para el sistema. |
#'''''La confidencialidad''''' son mecanismos con los que podemos confiar en que nadie puede ver el contendio de la información ni modificarla durante la transmisión. | #'''''La confidencialidad''''' son mecanismos con los que podemos confiar en que nadie puede ver el contendio de la información ni modificarla durante la transmisión. | ||
*Ambos mecanismos debería de trabajar conjuntamente. Por ejemplo si yo envío una contraseña para identificarse, pero con un sniffer alguien la puede capturar y ver en claro, no coneseguimos nada de seguridad . | *Ambos mecanismos debería de trabajar conjuntamente. Por ejemplo si yo envío una contraseña para identificarse, pero con un sniffer alguien la puede capturar y ver en claro, no coneseguimos nada de seguridad . | ||
Línea 30: | Línea 31: | ||
====Autentificación por el servidor web==== | ====Autentificación por el servidor web==== | ||
− | *Es el propio servidor '''''http''''' quien nos ofrece este método de | + | *Es el propio servidor '''''http''''' quien nos ofrece este método de autentificación. |
− | * | + | *Este tema se ve dentro del módulo de despliegue de aplicaciones web, no obstante aquí nos va a interesar, cómo podemos hacer que sea el servidor el que solicite las credenciales y recoga los datos aportados, y cómo desde php podemos ver esos valores o datos y gestionarlos en nuestro programa. |
− | * | + | *Recordamos el mecanismo de autentificación que usa '''''apache'''''. |
− | #Definir los | + | |
− | #Se puede indicar a qué recursos tiene acceso el usuario en concreto | + | #Definir los usuarios con acceso permitido |
− | #Generar en cabecera http un código http 401 que es un código de acceso restringido | + | #Se puede indicar a qué recursos tiene acceso el usuario en concreto (me refiero a qué páginas). |
− | #El navegador al recibir ese código | + | #Generar en cabecera '''http''' un código '''''http 401''''' que es un código de acceso restringido. Este código hace que el usuario reciba un formularo para aportar sus cedendiales |
+ | #El navegador al recibir ese código solicitando credenciales | ||
#El servidor recibe estas credenciales y las almacena en sus variables superglobales para futuras solicitudes | #El servidor recibe estas credenciales y las almacena en sus variables superglobales para futuras solicitudes | ||
[[imagen:autentificacionServidor.php]] | [[imagen:autentificacionServidor.php]] | ||
− | + | =====Crear la lista de usuarios===== | |
[[Imagen:listaUsuarios.png]] | [[Imagen:listaUsuarios.png]] | ||
*Usamos la herramienta '''''htpasswd''''' para crear un fichero con los usuarios y sus contraseñas | *Usamos la herramienta '''''htpasswd''''' para crear un fichero con los usuarios y sus contraseñas | ||
http://httpd.apache.org/docs/2.4/es/howto/auth.html | http://httpd.apache.org/docs/2.4/es/howto/auth.html | ||
− | *En caso de no tener la herramienta instalada debemos hacer la instalación de las herramientas o utilidades de apache | + | *En caso de no tener la herramienta instalada debemos hacer la instalación de las herramientas o utilidades de apache escribiendo |
sudo apt-get install apache2-utils | sudo apt-get install apache2-utils | ||
*Este comando tiene una serie de opciones que podemos ver en línea de comandos sin mas que esciribr su nombre | *Este comando tiene una serie de opciones que podemos ver en línea de comandos sin mas que esciribr su nombre | ||
Línea 64: | Línea 66: | ||
The SHA algorithm does not use a salt and is less secure than the MD5 algorithm. | The SHA algorithm does not use a salt and is less secure than the MD5 algorithm. | ||
</source> | </source> | ||
− | *importante | + | *Es importante la opción '''''-c''''' para crear el fichero. Recuerda usarla sólo la primera vez; cuando la usas se crea el fichero, y si ya existiera se elimina el contenido del fichero y se crea de nuevo. |
− | *Para incorporar nuevos usuarios se escribe sin opción y se | + | *Para incorporar nuevos usuarios se escribe sin opción y se añade el nombre de los usuario |
− | *Por seguridad es importante añadir el fichero en una ubicación fuera del | + | *Por seguridad es importante añadir el fichero en una ubicación fuera del directorio documentRoot delservidor web. |
− | {{ | + | |
− | *crea un fichero llamado misUsuarios y añade 3 usuarios maria/maria nieves/nieves sara/sara | + | {{MRM_Actividad| |
+ | *crea un fichero llamado '''''misUsuarios''''' y añade 3 usuarios maria/maria nieves/nieves sara/sara. Se indica usuario/password | ||
*Posteriormente visualiza el contenido del fichero | *Posteriormente visualiza el contenido del fichero | ||
− | + | *Observa cómo la pass aparece cifrada | |
− | *Primero nos ubicamos en el directorio donde queramos añadir o crear el fichero | + | ;Modo de actuación |
+ | 1.- Primero nos ubicamos en el directorio donde queramos añadir o crear el fichero | ||
cd /home/MiUsuario | cd /home/MiUsuario | ||
− | + | '''''MiUsuario''''' es vuestro propio directorio | |
− | + | 2.-Ahora creamos un directorio para guardar esta información y nos movemos en él | |
mkdir usuarios | mkdir usuarios | ||
cd usuarios | cd usuarios | ||
− | + | 3.-Una vez correctamente ubicados generamos el fichero de las password con la herramienta '''''htpasswd''''' | |
− | + | La primera vez con opción '''''-c''''' para crear el fichero | |
htpasswd -c misUsuarios maria | htpasswd -c misUsuarios maria | ||
htpasswd misUsuarios nieves | htpasswd misUsuarios nieves | ||
htpasswd misUsuarios nieves | htpasswd misUsuarios nieves | ||
+ | }} | ||
− | + | ;Indicar los recursos restringidos : .htacces | |
− | ;Indicar los recursos restringidos | + | *Para este cometido, apache nos permite usar el famoso fichero '''''.htaccess''''' que a continuación vamos a explicar. |
− | *Para este | + | *Para habilitar el uso de este fichero debemos indicarle al servidor web que vamos a utilizarlo. Esto se especifica en la directiva '''''AllowOverride''''' |
− | *Para habilitar el uso de este fichero debemos indicarle al servidor web que vamos a utilizarlo. Esto se especifica en la directiva AllowOverride | + | *Para más información ver |
− | *Para | + | |
http://www.bdat.net/documentos/apache/x367.html | http://www.bdat.net/documentos/apache/x367.html | ||
− | Y la oficial | + | Y la oficial (siempre la mejor). |
http://httpd.apache.org/docs/2.4/es/mod/core.html#allowoverride | http://httpd.apache.org/docs/2.4/es/mod/core.html#allowoverride | ||
*En nuestro caso tenemos que poner el valor '''''AuthConfig''''' o bien '''''All''''' | *En nuestro caso tenemos que poner el valor '''''AuthConfig''''' o bien '''''All''''' | ||
− | *Una vez que hemos hecho esto, cada vez que vaya a coger un fichero de un determinado directorio, antes de entregarlo, verificará que si existe un fichero .htaccess en ese directorio, en cuyo caso | + | *Una vez que hemos hecho esto, cada vez que vaya a coger un fichero de un determinado directorio, antes de entregarlo, verificará que si existe un fichero '''''.htaccess''''' en ese directorio, en cuyo caso pedirá credenciales. |
*Para indicar los recursos restringidos usaremos las siguientes directivas (Este será el contenido del fichero .htaccess | *Para indicar los recursos restringidos usaremos las siguientes directivas (Este será el contenido del fichero .htaccess | ||
*'''''AuthName''''' Nombre de dominio de la authentificación | *'''''AuthName''''' Nombre de dominio de la authentificación | ||
*'''''AuthType''''' Tipo de autentificación, pudiendo ser '''Basic''' y más segura '''Dijest''' | *'''''AuthType''''' Tipo de autentificación, pudiendo ser '''Basic''' y más segura '''Dijest''' | ||
*'''''AuthUserFile''''' Ruta del fichero de los usuarios con permiso''''' | *'''''AuthUserFile''''' Ruta del fichero de los usuarios con permiso''''' | ||
− | *'''''Require''''' '''''valid-user''''' o usuarios concretos de la lista que sí que tendrán acceso al | + | *'''''Require''''' '''''valid-user''''' o usuarios concretos de la lista que sí que tendrán acceso al recursos si se acreditan correctamente. |
− | + | {{Actividad|Title= Accesos restringidos, (resuelto en actividades) | |
− | {{Actividad| | + | Crea un sencillo sitio web que me redirija a 4 páginas: |
− | Crea un sencillo sitio web que me | + | |
*'''''Información General''''' : Tendrá acceso todo el mundo | *'''''Información General''''' : Tendrá acceso todo el mundo | ||
*'''''Información restirngida''''': Sólo tendŕan acceso los usuaarios creados en el fichero misUsuarios | *'''''Información restirngida''''': Sólo tendŕan acceso los usuaarios creados en el fichero misUsuarios | ||
Línea 109: | Línea 112: | ||
}} | }} | ||
+ | |||
+ | |||
+ | |||
+ | <!-- MRM Me quedo aquí --> | ||
====PHP accediendo a información http==== | ====PHP accediendo a información http==== | ||
− | *Desde el código de php podemos acceder a la información facilitada por el servidor | + | *Ahora viene la parte que realmente nos interesa a nosotros/as, qué es usar esto dentro de nuestro código '''''php'''''. |
+ | *Desde el código de php podemos acceder a la información facilitada por el servidor. | ||
*La matriz asociativa variable superglobal $_SERVER contiene esta información | *La matriz asociativa variable superglobal $_SERVER contiene esta información | ||
*Concretamente los índices | *Concretamente los índices | ||
Línea 116: | Línea 124: | ||
#'''''PHP_AUTH_PW''''' Es la password del usuario | #'''''PHP_AUTH_PW''''' Es la password del usuario | ||
#'''''AUTH_TYPE''''' Es el tipo de seguridad utilizado | #'''''AUTH_TYPE''''' Es el tipo de seguridad utilizado | ||
− | {{ | + | {{MRM_Actividad| |
*Modifica la página restringida para ver el usuario y password así como el método usado de autentifiacion | *Modifica la página restringida para ver el usuario y password así como el método usado de autentifiacion | ||
*El código que habría que añadir | *El código que habría que añadir |
Revisión de 08:30 9 dic 2016
Contenido
- 1 Qué es autentificarse
- 2 protocolo http vs https
- 3 Accesos restringidos, (resuelto en actividades)
Crea un sencillo sitio web que me redirija a 4 páginas:
- Información General : Tendrá acceso todo el mundo
- Información restirngida: Sólo tendŕan acceso los usuaarios creados en el fichero misUsuarios
- Información Sara : Tendrá acceso solo el usuario sara
- Información de grupo : Tendrá acceso los usuarios 3 usuarios de los 5 creados (sara alicia y paula)
Qué es autentificarse
- Por autentificarse vamos a entender un mecanismo por el cual el servidor web puede estar relativamente confiado en que está siendo consultado por una determinada máquina y/o persona
- Por ejemplo podemos visitar esta página y ver diferentes modos en los que piden autentificarse
https://www.tractis.com/login
- Modos de autentificarse
- contraseña y usuario
- Dni digital
- Certificados digitales de usuario
...
- Nosotros en este tema usaremos el módo de contraseña y usuario. En dos temas posteriores, cuando veamos servicios web usaremos otro sistema como google, igualmente se podría usar la cuenta de facebook o twiter para identificarte.
- La responsabilidad de exigir una clave de acceso puede recaer sobre el servidor web con los módulos de seguridad
- En este caso restringimos el acceso a la página o sitio web
- Otra opción habitual es tener un sitio con cierto contendo y en el sitio dar la posibilidad de identificarse / registrarse.
- A usuarios identificados se les ofrece otro contendio diferente.
Respecto a estos conceptos vamos a trabajar este tema que es el primero de tres aspectos del tema 4
Trabajo en proceso, espera cambios frecuentes. Tu ayuda y retroalimentación son bienvenidos. Ver página de charlas. |
protocolo http vs https
- Este es un concepto importante
- La seguridad del envío de datos es otro aspecto diferente del tema de la autentificación
- En seguridad entre otros aspectos tenemos
- La autentificación mecanismos por los cuales podemos confiar en que quien se ha identificado es conocido para el sistema.
- La confidencialidad son mecanismos con los que podemos confiar en que nadie puede ver el contendio de la información ni modificarla durante la transmisión.
- Ambos mecanismos debería de trabajar conjuntamente. Por ejemplo si yo envío una contraseña para identificarse, pero con un sniffer alguien la puede capturar y ver en claro, no coneseguimos nada de seguridad .
- Para la transmisión segura se emplea el protocolo https.
- Este tema se estudia en el módulo de despliegue de aplicaciones web.
- Nosotros usaremos http sin cifrar, pero se insiste en que no es segura la transmisión, pues podría ser objetivo de espía informático.
Autentificación por el servidor web
- Es el propio servidor http quien nos ofrece este método de autentificación.
- Este tema se ve dentro del módulo de despliegue de aplicaciones web, no obstante aquí nos va a interesar, cómo podemos hacer que sea el servidor el que solicite las credenciales y recoga los datos aportados, y cómo desde php podemos ver esos valores o datos y gestionarlos en nuestro programa.
- Recordamos el mecanismo de autentificación que usa apache.
- Definir los usuarios con acceso permitido
- Se puede indicar a qué recursos tiene acceso el usuario en concreto (me refiero a qué páginas).
- Generar en cabecera http un código http 401 que es un código de acceso restringido. Este código hace que el usuario reciba un formularo para aportar sus cedendiales
- El navegador al recibir ese código solicitando credenciales
- El servidor recibe estas credenciales y las almacena en sus variables superglobales para futuras solicitudes
Archivo:AutentificacionServidor.php
Crear la lista de usuarios
- Usamos la herramienta htpasswd para crear un fichero con los usuarios y sus contraseñas
http://httpd.apache.org/docs/2.4/es/howto/auth.html
- En caso de no tener la herramienta instalada debemos hacer la instalación de las herramientas o utilidades de apache escribiendo
sudo apt-get install apache2-utils
- Este comando tiene una serie de opciones que podemos ver en línea de comandos sin mas que esciribr su nombre
Usage: htpasswd [-cmdpsD] passwordfile username htpasswd -b[cmdpsD] passwordfile username password htpasswd -n[mdps] username htpasswd -nb[mdps] username password -c Create a new file. -n Don\'t update file; display results on stdout. -m Force MD5 encryption of the password (default). -d Force CRYPT encryption of the password. -p Do not encrypt the password (plaintext). -s Force SHA encryption of the password. -b Use the password from the command line rather than prompting for it. -D Delete the specified user. On other systems than Windows, NetWare and TPF the '-p' flag will probably not work. The SHA algorithm does not use a salt and is less secure than the MD5 algorithm.
- Es importante la opción -c para crear el fichero. Recuerda usarla sólo la primera vez; cuando la usas se crea el fichero, y si ya existiera se elimina el contenido del fichero y se crea de nuevo.
- Para incorporar nuevos usuarios se escribe sin opción y se añade el nombre de los usuario
- Por seguridad es importante añadir el fichero en una ubicación fuera del directorio documentRoot delservidor web.
1.- Primero nos ubicamos en el directorio donde queramos añadir o crear el fichero cd /home/MiUsuario MiUsuario es vuestro propio directorio 2.-Ahora creamos un directorio para guardar esta información y nos movemos en él mkdir usuarios cd usuarios 3.-Una vez correctamente ubicados generamos el fichero de las password con la herramienta htpasswd La primera vez con opción -c para crear el fichero htpasswd -c misUsuarios maria htpasswd misUsuarios nieves htpasswd misUsuarios nieves
|
- Indicar los recursos restringidos
- .htacces
- Para este cometido, apache nos permite usar el famoso fichero .htaccess que a continuación vamos a explicar.
- Para habilitar el uso de este fichero debemos indicarle al servidor web que vamos a utilizarlo. Esto se especifica en la directiva AllowOverride
- Para más información ver
http://www.bdat.net/documentos/apache/x367.html
Y la oficial (siempre la mejor).
http://httpd.apache.org/docs/2.4/es/mod/core.html#allowoverride
- En nuestro caso tenemos que poner el valor AuthConfig o bien All
- Una vez que hemos hecho esto, cada vez que vaya a coger un fichero de un determinado directorio, antes de entregarlo, verificará que si existe un fichero .htaccess en ese directorio, en cuyo caso pedirá credenciales.
- Para indicar los recursos restringidos usaremos las siguientes directivas (Este será el contenido del fichero .htaccess
- AuthName Nombre de dominio de la authentificación
- AuthType Tipo de autentificación, pudiendo ser Basic y más segura Dijest
- AuthUserFile Ruta del fichero de los usuarios con permiso
- Require valid-user o usuarios concretos de la lista que sí que tendrán acceso al recursos si se acreditan correctamente.
{{{1}}}
|
PHP accediendo a información http
- Ahora viene la parte que realmente nos interesa a nosotros/as, qué es usar esto dentro de nuestro código php.
- Desde el código de php podemos acceder a la información facilitada por el servidor.
- La matriz asociativa variable superglobal $_SERVER contiene esta información
- Concretamente los índices
- PHP_AUTH_USER Es el nombre del usuario
- PHP_AUTH_PW Es la password del usuario
- AUTH_TYPE Es el tipo de seguridad utilizado
<?php echo "te has autentificado como:<br/>"; echo "Usuario: ". $_SERVER['PHP_AUTH_USER']."<br/>"; echo "Password: ". $_SERVER['PHP_AUTH_PW']."<br/>"; echo "Tipo de autentificacion: ". $_SERVER['AUTH_TYPE']; ?>
|
Usar función header para la autentifiación
- La referencia de la función header Sirve para crear cabeceras de la página solicitada
http://es.php.net/manual/es/function.header.php
- Vamos a usarla para unas acciones concretas
- Modificar el texto de error
- En este caso no vamos a usar el fichero .htaccess
- Cuando accedemos a una página y no nos hemos identificado aparece un error 401
- Vamos a solicitar una autentificación de tipo basic
- Para ello especificamos la cabecera WWW-Authenticate
- Ademas de especificar el modo de autentifación ponemos el mensaje que verá el usuario
header('WWW-Authenticate: Basic Realm="Página de acceso restringido. Necesitas credenciales"');
- Para no mostrar la página solicitada se envía un código 401, lo que provoca que se solicite un usuario y contraseña antes de visualizar el resto de la página.
- El códgio quedaría
header('HTTP/1.0 401 Unauthorized');
- El código completo quedaría
<?php if (!isset($_SERVER['PHP_AUTH_USER'])) { header('WWW-Authenticate: Basic Realm="Contenido restringido"'); header('HTTP/1.0 401 Unauthorized'); echo "Usuario no reconocido!"; exit; } ?>
- Ahora debemos poder especificar cual va a ser el usuario esperado en esta página
- Por ejemplo en la página anterior insertamos un usuario cualquiera y una password cualquiera entraremos ya que no comparamos con nadie
<?php echo"Nombre de usuario: ".$_SERVER['PHP_AUTH_USER'] ."<br />"; echo"Contraseña: ".$_SERVER['PHP_AUTH_PW'] ."<br />"; ?>
- Verficar el usuario y contraseña
- Con el siguiente código verificaríamos el usuario y contraseña usando el modo de header
<?php if ($_SERVER['PHP_AUTH_USER']!='manolo' || $_SERVER['PHP_AUTH_PW']!='passManolo.') { header('WWW-Authenticate: Basic Realm="Contenido restringido"'); header('HTTP/1.0 401 Unauthorized'); echo "Usuario no reconocido!"; exit; } ?>
- Esto nos podría servir, puesto que el código no se envía al cliente, y él nunca podría ver la password, ni el usuario
- No obstante, siempre será una opción más segura, y más versátil tener el usuario almacenado en una base de datos que ya veremos más adelante cuando veamos bases de datos