Foros del Web » Programando para Internet » PHP »

Acceso restringido

Estas en el tema de Acceso restringido en el foro de PHP en Foros del Web. Hola! Queria poner un acceso restringido para poder acceder al panel de control para mi sistema de noticias, pero no se como hacerlo. he visto ...
  #1 (permalink)  
Antiguo 30/11/2006, 05:05
Avatar de alllebor  
Fecha de Ingreso: septiembre-2006
Mensajes: 295
Antigüedad: 17 años, 7 meses
Puntos: 1
Acceso restringido

Hola! Queria poner un acceso restringido para poder acceder al panel de control para mi sistema de noticias, pero no se como hacerlo.
he visto algo por la web como por ejemplo esto:

<?php // Manual de PHP de WebEstilo.com
if (($PHP_AUTH_USER!="Joe") || ($PHP_AUTH_PW!="123")) {
header('WWW-Authenticate: Basic realm="Acceso restringido"');
header('HTTP/1.0 401 Unauthorized');
echo 'Authorization Required.';
exit;
}
?>

Pero no me funciona supongo que es por la Advertencia que ponia en el manual "El acceso restringido a páginas usando las variables globales $PHP_AUTH_USER, $PHP_AUTH_PW y $PHP_AUTH_TYPE solo funciona si PHP ha sido instalado como un módulo de Apache, si ha sido instalado como un CGI los ejemplos de ésta sección no funcionarán."

hay alguna forma no muy complicada para hacer un acceso mediante usuario y contraseña??
Muchas gracias
  #2 (permalink)  
Antiguo 30/11/2006, 05:13
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Además de que las variables de servidro PHP_AUT_USER y afines sólo son accesibles desde PHP instalado como módulo de Apache (o como ISAPI en general) .. tampoco el acceso que haces es correcto a esas variables y te puede dar muchos problemas.

En general la mayoría de tutoriales del manual de PHP de webestilo.com están muy anticuados y desfasados.

Si quieres usar Autentificación HTTP .. revisa el manual oficial de PHP al respecto:

http://www.php-es.com/features.http-auth.html

Si quieres otra alternativa, usa sesiones para validar a tu usuario en las páginas/scripts que circule en la "sesión".

Como veras .. ambos tipos de autentificación/seguimiento tienen sus prós y contras. La autentificación HTTP biene bien para no tener que modificar ningún archivo (incluyendo el código de validación bajo sesesiones u otros métodos), también protege en general todo contenido que esté en ese directorio o subsiguientes: archivos .php, .html, imagenes .. etc. En la autentificación por "sesiones" se protegen scripts .php sólo .. las imagenes y otros tipos de archivos los tendrás que proteger por otros médios: creando scripts que entreguen las imagenes, protegiendo el acceso directo desde otros "hosts" que no sean el mismo que el servidor (para que sólo accedan tus scripts PHP directo). .. etc.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 30/11/2006, 05:36
Avatar de alllebor  
Fecha de Ingreso: septiembre-2006
Mensajes: 295
Antigüedad: 17 años, 7 meses
Puntos: 1
UFF no controlo apena PHP, y lo que me dices no lo tengo muy claro, yo en el sistema de noticias subo una imagen al servidor. Estoy mirando la pagina de me has pasado pero no lo entiendo mucho.

Donde le digo mi usuario y password? Se que soy muy torpe pero es que acabo de empezar con esto y lo necesito. Si tienes tiempo explicame un pokito lo que hace este codigo,ok?GRACIAS
<?php
$realm = 'Restricted area';

//user => password
$users = array('admin' => 'mypass', 'guest' => 'guest');


if (empty($_SERVER['PHP_AUTH_DIGEST'])) {
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Digest realm="'.$realm.
'",qop="auth",nonce="'.uniqid().'",opaque="'.md5($ realm).'"');

die('Text to send if user hits Cancel button');
}


// analyze the PHP_AUTH_DIGEST variable
if (!($data = http_digest_parse($_SERVER['PHP_AUTH_DIGEST'])) ||
!isset($users[$data['username']]))
die('Wrong Credentials!');


// generate the valid response
$A1 = md5($data['username'] . ':' . $realm . ':' . $users[$data['username']]);
$A2 = md5($_SERVER['REQUEST_METHOD'].':'.$data['uri']);
$valid_response = md5($A1.':'.$data['nonce'].':'.$data['nc'].':'.$data['cnonce'].':'.$data['qop'].':'.$A2);

if ($data['response'] != $valid_response)
die('Wrong Credentials!');

// ok, valid username & password
echo 'Your are logged in as: ' . $data['username'];


// function to parse the http auth header
function http_digest_parse($txt)
{
// protect against missing data
$needed_parts = array('nonce'=>1, 'nc'=>1, 'cnonce'=>1, 'qop'=>1, 'username'=>1, 'uri'=>1, 'response'=>1);
$data = array();

preg_match_all('@(\w+)=(?:([\'"])([^\2]+)\2|([^\s,]+))@', $txt, $matches, PREG_SET_ORDER);

foreach ($matches as $m) {
$data[$m[1]] = $m[3] ? $m[3] : $m[4];
unset($needed_parts[$m[1]]);
}

return $needed_parts ? false : $data;
}
?>
  #4 (permalink)  
Antiguo 30/11/2006, 06:09
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
En este array tienes tus usuarios.
$users = array('admin' => 'mypass', 'guest' => 'guest');

'usuario' => 'contraseña

Y como veras .. como array que es, no sólo un usuario podrías crear .. puedes crear más. Segúro que en esa misma página del manual o en las FAQ's de este foro PHP tienes ejemplos de autentificación HTTP más simples (que puedas entender fácilmente) .. el ejemplo que muestras hace un montón de cosas (que no es que sea malo, está muy bien ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 30/11/2006, 06:54
Avatar de alllebor  
Fecha de Ingreso: septiembre-2006
Mensajes: 295
Antigüedad: 17 años, 7 meses
Puntos: 1
Cluster te he hecho caso y he ido al FAQ de este foro y he encontrado esto:
seguridad.php
Cita:
<?
/* Autenticación
*/
$muerte = 'Acceso Denegado!!!! :-p';

if(!isset($PHP_AUTH_USER)) {
header('WWW-Authenticate: Basic realm="Nombre del Site"');
header('HTTP/1.0 401 Unauthorized');
echo $muerte;
exit;
} else {
// valido mi clave en el servidor ...
if (@$db_link = mysql_connect("localhost", "usuario", "clave")) {
@mysql_select_db("base_de_datos");
}

$sql = "select * from usuarios
where ((usr_login = '$PHP_AUTH_USER')
and (usr_pass = '$PHP_AUTH_PW')) ";

$qpass= mysql_query($sql, $db_link);
if(mysql_num_rows($qpass)<>1) {
echo $muerte;
exit;
}

}
?>
y al principio de cada pagina que quiero autentificarme pongo esto:

<? include("seguridad.php");?>

en la base de datos he creado la tabla y he dado de alta un usuario, el problema es que cuando entro a la pagina me sale la ventanita de windows de usuario y contraseña, escribo el usuario y la contraseña y NADA! me vuelve a salir la ventanita de autentificacion y no entra a la pagina, a que es debido??
  #6 (permalink)  
Antiguo 30/11/2006, 07:27
Avatar de alllebor  
Fecha de Ingreso: septiembre-2006
Mensajes: 295
Antigüedad: 17 años, 7 meses
Puntos: 1
Que alguien me diga algo sobre el restringir el acceso, a una cierta pagina de php!!!
  #7 (permalink)  
Antiguo 30/11/2006, 07:27
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
El detalle en ese código es que no usa los arrays superglobales .. comparalos:

$PHP_AUTH_USER y $_SERVER['PHP_AUTH_USER']

Tampoco es necesario si no lo quieres usar Base de datos (en el otro ejemplo usas un array simple para unos pocos usuarios "fijos a código").

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 30/11/2006, 07:28
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por alllebor Ver Mensaje
Que alguien me diga algo sobre el restringir el acceso, a una cierta pagina de php!!!
Hey! .. ten paciencia, .. por mucho que para tí sea urgente .. fijate bien donde estás preguntando, en unos foros totalmente públicos donde la gente responde según su tiempo le dá.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 30/11/2006, 07:31
Avatar de alllebor  
Fecha de Ingreso: septiembre-2006
Mensajes: 295
Antigüedad: 17 años, 7 meses
Puntos: 1
OK! perdona Cluster
  #10 (permalink)  
Antiguo 30/11/2006, 09:27
Avatar de alllebor  
Fecha de Ingreso: septiembre-2006
Mensajes: 295
Antigüedad: 17 años, 7 meses
Puntos: 1
Nadie sabe nada sobre este tema, por favor que lo necesito para mañana, y no me funciona nada de lo que encuentro. Quiero algo facil, si es mediante HTTP mas facil, pero quiero algo que me funcione, por favoooorr
Cluster perdona por ser impaciente pero es que lo necesito preciso.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:18.