Restrinxir acceso a páxinas
Nesta sección imos explicar como podemos restrinxir o acceso a segundo que páxinas, para que só as persoas autorizadas poidan acceder a certas partes do noso sitio web.
- Atención: O acceso restrinxido a páxinas usando as variables globais $PHP_AUTH_USER, $PHP_AUTH_PW e $PHP_AUTH_TYPE só funciona se PHP foi instalado como un módulo de Apache, se foi instalado como un CGI os exemplos desta sección non funcionarán.
Para conseguir a autenticación nas páxinas usaremos o sistema de autenticación do protocolo HTTP, este sistema baséase nas variables de servidor $_SERVER['PHP_AUTH_USER'] e $_SERVER['PHP_AUTH_PW'].
- 1.- $_SERVER['PHP_AUTH_USER']. Nome de usuario introducido.
- 2.- $_SERVER['PHP_AUTH_PW']. Contrasinal introducido.
Para que o navegador nos mostre a fiestra de petición de nome de usuario e contraseña basta con enviar a seguinte cabeceira:
<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="Acceso restrinxido"');
header('HTTP/1.0 401 Unauthorized');
echo 'Requerida autenticación para acceder a esta páxina.';
exit;
}
else {
echo "<p>Introduciu como nome de usuario: {$_SERVER['PHP_AUTH_USER']}.</p>";
echo "<p>Introduciu como contrasinal: {$_SERVER['PHP_AUTH_PW']}</p>";
}
?>
Isto provoca que se mostre a fiestra de nome de usuario e contraseña e os datos introducidos asígnense ás variables $_SERVER['PHP_AUTH_USER'] e $_SERVER['PHP_AUTH_PW'].
A partir de aquí realizaremos as comprobacións necesarias para asegurarnos que os datos introducidos son os correctos.
No seguinte exemplo pediremos autorización e comprobaremos se o nome de usuario é marta e a contraseña abc123 se é así teremos acceso ao resto da páxina.
<?phpif (($_SERVER['PHP_AUTH_USER'] != "marta") || ($_SERVER['PHP_AUTH_PW'] != "abc123")) {
header('WWW-Authenticate: Basic realm="Acceso restrinxido"');
header('HTTP/1.0 401 Unauthorized');
echo 'Autorizacion requerida para acceder a esta paxina.';
exit;
}
?>
<html>
<head>
<title>Exemplo de PHP</title>
</head>
<body>
Conseguiu o acceso a zona restrinxida</B>.
</body>
</html>