[perl] Una Ayuda

Salvador Ortiz Garcia sog en msg.com.mx
Vie Jul 14 18:01:52 CDT 2000


On Thu, 13 Jul 2000, Antonio Molina wrote:

> HTTP/1.0 401 Unauthorized
> Proxy-Connection: close
> WWW-Authenticate: Basic realm=Sitio
> 
> Este encabezado hace que aparesca el prompt del password
> como obtengo y uso el resultado enviado 
> 
> como le contesto que la password es ok como, como, como ...
> 
> ... alguien me puede echar una mano

Bueno, la pregunta no esta relacionada no con perl ni con Linux, sino con
HTTP y CGI, pero sale intento de respuesta.

Por qué no usas los metodos estandar de apache (require, AuthName, etc.)?

Los scripts CGI, independientemente del lenguaje empleado no tienen(1) 
acceso a esa información. 

Me explico: el servidor, cuando necesita autentificar el acceso a ciertas
entidades verifica la existencia de un 'Authorization: <auth_type>
<cookie>' entre los encabezados de la solicitud, en donde si <auth_type>
es 'Basic', <cookie> es la cadena "<user_id>:<plain_text_password>"
codificada en Base64.(2) 

Cuando no existe el 'Authorization:...' o la dupla en <cookie> no es
acceptada es cuando se  emite el código de respuesta 401 y el
'WWW-Authenticate: ...'

El problema consite en que, por seguridad el protocolo CGI prohibe
explicitamente que los scripts reciban el 'Authorization: ...' tal cual
(sólo pueden recibir el <auth_type>) y de ahí que si bien pueden emitir
el 401 no puedan ser usados para validar el acceso.

Apache tiene varios módulos (mod_auth*) que en una face previa se encargan
de esos menesteres, pero si lo necesitas puedes hacer tus propios módulos
de autentificación (normalmente en C o con mod_perl), pero no usando la
inteface CGI. 


Saludos

Salvador Ortiz

Notas:

(1) Por "default". Por ejemplo el código de apache se puede hackear para
    permitirlo.

(2) Lo que por cierto en términos de seguridad es malísimo. El tipo
    'Digest' es mucho mejor pero mas complicado.



Más información sobre la lista de distribución Ayuda