Usuario:ManuelRomero/php/autentificacion

{|cellpadding="5" cellspacing="6" style="width:100%;background:#DFFFFF; border-style:solid; border-width:2px; border-color:#0066FF;" {|cellpadding="5" cellspacing="6" style="width:100%;background:#DFFFFF; border-style:solid; border-width:1px; border-color:#0066FF;" center
 * width="100%" valign="top" style="padding: 0; margin:0px;" |
 * width="100%" valign="top" style="padding: 0; margin:0px;" |

Qué es autentificarse
https://www.tractis.com/login ... Respecto a estos conceptos vamos a trabajar este tema que es el primero de tres aspectos del tema 4
 * 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
 * Modos de autentificarse
 * 1) contraseña y usuario
 * 2) Dni digital
 * 3) 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.

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
 * 1) La autentificación mecanismos por los cuales podemos confiar en que quien se ha identificado es conocido para el sistema
 * 2) 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
http://httpd.apache.org/docs/2.4/es/howto/auth.html
 * Es el propio servidor http quien nos ofrece este método de autentifiación.
 * Seguramente ya lo habéis estudiado en despliegue, pero lo vamos a comentar
 * El mecanismo es sencillo.
 * 1) Definir los usarios con acceso permitido
 * 2) Se puede indicar a qué recursos tiene acceso el usuario en concreto
 * 3) el código http en caso de acceso restringido es el 401
 * 4) El navegador al recigir ese código solicita credenciales
 * El servidor recibe estas credenciales y las almacena en sus variables superglobales para futuras solicituds
 * Crear la lista de usuarios
 * Usamos la herramienta htpasswd para crear un fichero con los usarios y sus contraseñas
 * Este comando tiene una serie de opciones que podemos ver en línea de comandos sin mas que esciribr su nombre
 * importante es la opción -c para crear el fichero
 * Para incorporar nuevos usuarios se escribe sin opcion y se añaden
 * Por seguridad es importante añadir el fichero en una ubicación fuera del servidor web.

http://httpd.apache.org/docs/2.4/es/mod/core.html#allowoverride
 * Indicar los recursos restringidos al servidor apache, la mejor opción (no la única)es crear un directorio .htacess, en le directorio en el que se encuentren los recursos compartidos
 * Para indicar los recursos restringidos usarmos las siguientes directivas ya conocidas
 * AuthName Nombre de dominio de la authentificación
 * AuthType Tipo de autentificación Basic y más segura Dijest
 * AuthUserFileRuta del fichero de los usuarios con permiso'
 * Require valid-user o usuarios concretos de la lista que sí que tendrán acceso al recuros
 * Ademas en el fichero de confituración de apache debemos activar la directiva AllowOverride

PHP accediendo a información http

 * Desde el código de php podemos acceder a la información facilitada por el servidor php.
 * La matriz asociativa variable superglobal $_SERVER contiene esta información
 * Concretamente los índices
 * 1) PHP_AUTH_USER Es el nombre del usuario
 * 2) PHP_AUTH_PW Es la password del usuario
 * 3) AUTH_TYPE Es el tipo de seguridad utilizado

Usar función header para la autentifiación
http://es.php.net/manual/es/function.header.php http://es.php.net/manual/es/function.md5.php {{Actividad| http://www.md5online.es/cifrar-md5.html
 * La referencia de la función header
 * 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
 * Para no mostrar la página solicitada se envía un error 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
 * El código completo quedaría
 * Ahora debemos poder especificar cual va a ser el usuario esperado en esta página
 * Por ejemplo en la página anterior insertamos un usario cualquiera y una password cualquiera entraremos ya que no comparamos con nadie
 * Verficar el usuario y contraseñad
 * Con el siguiente código verificaríamos el usuario y contraseña usando el modo de header
 * 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
 * Podríamos crear la siguiente tabla en nuestra base de datos dwes
 * Con esto estaríamos creando el usuario dwes y su password abc123., el punto final, también forma parte de la contraseña
 * Si queremos usar una base de datos es importante cifrar el contenido de la password
 * Para ello usaremos la función md5, cuya información oficial es
 * Para usarla simplemente le haremos md5(string), y veremos el hash de dicho string
 * Utilizando la extension mysqli, solicitamos credenciales para los usuarios en las diferentes páginas del ejercicio anterior, de modo que si bien el usuario o la pass son incorrecta, se vuelven a pedir credenciales.
 * Para obtener el código md5 y crearlo en la base de datos, podemos usar esta página

Solución propuesta
}}


 * }