Discussion:
restriccion de acceso en apache basándose en programa externo
Alejandro Vargas
2012-06-05 09:20:19 UTC
Permalink
Tengo un sistema en php. Autentica usuarios y lleva una sesión para
mantener el usuario.

Pero quiero que los usuarios tengan acceso a algunos archivos directamente
a través del apache, tipo /archivos/algo/xxx, o sea que no los envíe un php
sino que los accedan directamente.

Lo que quisiera ver es si hay alguna manera de que en el .htaccess yo le
diga al Apache que llame a un programa externo (en php en este caso) para
verificar si el usuario tiene acceso o no. ¿Se les ocurre alguna forma?
--
Qapla'
Alejandro Vargas
Matto Godoy
2012-06-05 12:15:26 UTC
Permalink
Como vas a acceder a los archivos? por medio de un navegador o desde algun
script/programa?
Post by Alejandro Vargas
Tengo un sistema en php. Autentica usuarios y lleva una sesión para
mantener el usuario.
Pero quiero que los usuarios tengan acceso a algunos archivos directamente
a través del apache, tipo /archivos/algo/xxx, o sea que no los envíe un php
sino que los accedan directamente.
Lo que quisiera ver es si hay alguna manera de que en el .htaccess yo le
diga al Apache que llame a un programa externo (en php en este caso) para
verificar si el usuario tiene acceso o no. ¿Se les ocurre alguna forma?
--
Qapla'
Alejandro Vargas
Emiliano Romero
2012-06-05 14:24:46 UTC
Permalink
Post by Alejandro Vargas
Tengo un sistema en php. Autentica usuarios y lleva una sesión para
mantener el usuario.
Pero quiero que los usuarios tengan acceso a algunos archivos directamente
a través del apache, tipo /archivos/algo/xxx, o sea que no los envíe un php
sino que los accedan directamente.
Lo que quisiera ver es si hay alguna manera de que en el .htaccess yo le
diga al Apache que llame a un programa externo (en php en este caso) para
verificar si el usuario tiene acceso o no. ¿Se les ocurre alguna forma?
Estoy con el mismo problema aca y justamente la semana pasada estuve
leyendo un poco a ver como lo hacen los grandes. Lo que he visto que
varios hacen es crear links simbolicos hacia esos archivos en una
ubicación publicada en apache. Esos links solo duran unos minutos y
despues se borran.
Si no lo que tenes que hacer es con php un passthru.. no deberia tener
impacto de memoria ya que pasa directamente, pero honestamente no lo he
probado.

Si encontras alguna otra forma mandalo a la lista que me interesa
enterarme de otras ideas/alternativas.

Slds

about.me/reflex
Alejandro Vargas
2012-06-05 14:33:36 UTC
Permalink
Post by Emiliano Romero
Si no lo que tenes que hacer es con php un passthru.. no deberia tener
impacto de memoria ya que pasa directamente, pero honestamente no lo he
probado.
Quería evitar eso porque a demás de pasar el archivo tendría que analizar
el tipo mime para que lo informe al navegador correctamente.
Post by Emiliano Romero
Si encontras alguna otra forma mandalo a la lista que me interesa
enterarme de otras ideas/alternativas.
Si encuentro alguna solución interesante te aviso.
--
Qapla'
Alejandro Vargas
Alfredo Daniel Rezinovsky
2012-06-05 15:05:19 UTC
Permalink
Post by Emiliano Romero
Post by Alejandro Vargas
Tengo un sistema en php. Autentica usuarios y lleva una sesión para
mantener el usuario.
Pero quiero que los usuarios tengan acceso a algunos archivos
directamente
a través del apache, tipo /archivos/algo/xxx, o sea que no los envíe un php
sino que los accedan directamente.
Lo que quisiera ver es si hay alguna manera de que en el .htaccess yo le
diga al Apache que llame a un programa externo (en php en este caso) para
verificar si el usuario tiene acceso o no. ¿Se les ocurre alguna forma?
Estoy con el mismo problema aca y justamente la semana pasada estuve
leyendo un poco a ver como lo hacen los grandes. Lo que he visto que
varios hacen es crear links simbolicos hacia esos archivos en una
ubicación publicada en apache. Esos links solo duran unos minutos y
despues se borran.
Si no lo que tenes que hacer es con php un passthru.. no deberia tener
impacto de memoria ya que pasa directamente, pero honestamente no lo
he probado.
Si encontras alguna otra forma mandalo a la lista que me interesa
enterarme de otras ideas/alternativas.
Slds
about.me/reflex
Se me ocurre poner un squid adelante y usar un script de redirect en php
que te deje pasar o te redireccione temporalmente a la pagina de error.
El apache lo pones a escucha en localhost y le entras solo desde el squid.
No deja de ser un asco la solucion...
Fede
2012-06-05 16:40:27 UTC
Permalink
Post by Alejandro Vargas
Tengo un sistema en php. Autentica usuarios y lleva una sesión para
mantener el usuario.
Pero quiero que los usuarios tengan acceso a algunos archivos
directamente
a través del apache, tipo /archivos/algo/xxx, o sea que no los envíe un php
sino que los accedan directamente.
Lo que quisiera ver es si hay alguna manera de que en el .htaccess yo le
diga al Apache que llame a un programa externo (en php en este caso) para
verificar si el usuario tiene acceso o no. ¿Se les ocurre alguna forma?
Acá tenes varios módulos para autenticar y autorizar:

http://httpd.apache.org/docs/2.2/howto/auth.html

Incluido uno para bases de datos SQL o LDAP.

Desde PHP podrías insertar el registro y el apache lo lee para autorizar.
Hernán G. Diaz (HGDI)
2012-06-05 17:28:06 UTC
Permalink
Post by Alejandro Vargas
Tengo un sistema en php. Autentica usuarios y lleva una sesión para
mantener el usuario.
Pero quiero que los usuarios tengan acceso a algunos archivos directamente
a través del apache, tipo /archivos/algo/xxx, o sea que no los envíe un php
sino que los accedan directamente.
Lo que quisiera ver es si hay alguna manera de que en el .htaccess yo le
diga al Apache que llame a un programa externo (en php en este caso) para
verificar si el usuario tiene acceso o no. ¿Se les ocurre alguna forma?
Tus usuarios del sistema php estimo que están almacenados en "algún"
lugar... normalmente en una tabla de una base de datos o en un
directorio ldap? Apache tiene módulos para validar en bases de datos
(mod_auth_mysql, mod_auth_dbm, etc), o módulos "auth" para ldap,
kerberos, nis, smb, ntlm y otros más.

En ese caso, sólo poné una directiva <Directory> en tu apache o vhost
que para acceder a esos archivos tengan que validan usando el método
elegido.

Ej:

Alias /archivos /archivos/algo/xxx

<Directory //archivos/algo/xxx/>
AuthType Basic
AuthName "Acceso a Archivos"
# Opciones de configuración específicas del módulo que validación
que uses.

Require valid-user
</Directory>


De esta manera, con tu mismo usuario/password que utilizas para validar
en tu sistema php pueden acceder a tu apache directamente (sin usar php)
y acceder a los archivos. Allí apache se encarga de todo el resto.

--
Hernán
Alejandro Vargas
2012-06-06 09:39:27 UTC
Permalink
El 5 de junio de 2012 19:28, "Hernán G. Diaz (HGDI)"
Post by Alejandro Vargas
Tengo un sistema en php. Autentica usuarios y lleva una sesión para
Post by Alejandro Vargas
mantener el usuario.
Pero quiero que los usuarios tengan acceso a algunos archivos directamente
a través del apache, tipo /archivos/algo/xxx, o sea que no los envíe un php
sino que los accedan directamente.
Lo que quisiera ver es si hay alguna manera de que en el .htaccess yo le
diga al Apache que llame a un programa externo (en php en este caso) para
verificar si el usuario tiene acceso o no. ¿Se les ocurre alguna forma?
Tus usuarios del sistema php estimo que están almacenados en "algún"
lugar... normalmente en una tabla de una base de datos o en un directorio
ldap? Apache tiene módulos para validar en bases de datos (mod_auth_mysql,
mod_auth_dbm, etc), o módulos "auth" para ldap, kerberos, nis, smb, ntlm y
otros más.
En ese caso, sólo poné una directiva <Directory> en tu apache o vhost que
para acceder a esos archivos tengan que validan usando el método elegido.
Alias /archivos /archivos/algo/xxx
<Directory //archivos/algo/xxx/>
AuthType Basic
AuthName "Acceso a Archivos"
# Opciones de configuración específicas del módulo que validación que
uses.
Require valid-user
</Directory>
De esta manera, con tu mismo usuario/password que utilizas para validar en
tu sistema php pueden acceder a tu apache directamente (sin usar php) y
acceder a los archivos. Allí apache se encarga de todo el resto.
Claro, pero en cualquiera de estos casos el usuario va a tener que escribir
de nuevo su clave. A no ser que hiciera que toda la aplicación utilizara
autenticación básica o digest. De esa forma el navegador ya lo tendría
memorizado.
--
Qapla'
Alejandro Vargas
Hernán G. Diaz (HGDI)
2012-06-06 15:37:02 UTC
Permalink
Post by Alejandro Vargas
El 5 de junio de 2012 19:28, "Hernán G. Diaz (HGDI)"
Post by Alejandro Vargas
Tengo un sistema en php. Autentica usuarios y lleva una sesión para
Post by Alejandro Vargas
mantener el usuario.
Pero quiero que los usuarios tengan acceso a algunos archivos directamente
a través del apache, tipo /archivos/algo/xxx, o sea que no los envíe un php
sino que los accedan directamente.
Lo que quisiera ver es si hay alguna manera de que en el .htaccess yo le
diga al Apache que llame a un programa externo (en php en este caso) para
verificar si el usuario tiene acceso o no. ¿Se les ocurre alguna forma?
Tus usuarios del sistema php estimo que están almacenados en "algún"
lugar... normalmente en una tabla de una base de datos o en un directorio
ldap? Apache tiene módulos para validar en bases de datos (mod_auth_mysql,
mod_auth_dbm, etc), o módulos "auth" para ldap, kerberos, nis, smb, ntlm y
otros más.
En ese caso, sólo poné una directiva<Directory> en tu apache o vhost que
para acceder a esos archivos tengan que validan usando el método elegido.
Alias /archivos /archivos/algo/xxx
<Directory //archivos/algo/xxx/>
AuthType Basic
AuthName "Acceso a Archivos"
# Opciones de configuración específicas del módulo que validación que
uses.
Require valid-user
</Directory>
De esta manera, con tu mismo usuario/password que utilizas para validar en
tu sistema php pueden acceder a tu apache directamente (sin usar php) y
acceder a los archivos. Allí apache se encarga de todo el resto.
Claro, pero en cualquiera de estos casos el usuario va a tener que escribir
de nuevo su clave. A no ser que hiciera que toda la aplicación utilizara
autenticación básica o digest. De esa forma el navegador ya lo tendría
memorizado.
Fijate en
http://bytes.com/topic/php/answers/798698-basic-authentication-without-curl

Tal vez esto te sirva para que luego de validar en el sistema php, hagas
algún request a un archivo en tu webserver y así te queda validanda
(basic http) tu sesion php y así dejas las credenciales "persistentes".
Fijate si luego de esto, podés ir directamente al url (sin php) ya que
*estarías* validado en el apache (con el curl o fopen realizado al login
en tu sistema php).

Hernán

Loading...