Foros del Web » Programando para Internet » PHP »

Password Temporal

Estas en el tema de Password Temporal en el foro de PHP en Foros del Web. Necesito un script para crear una pagina protegida con un password temporal, alguien podria decirme donde puedo conseguir alguna informacion. La idea es que el ...
  #1 (permalink)  
Antiguo 07/02/2003, 07:44
 
Fecha de Ingreso: febrero-2003
Mensajes: 2
Antigüedad: 14 años, 10 meses
Puntos: 0
Password Temporal

Necesito un script para crear una pagina protegida con un password temporal, alguien podria decirme donde puedo conseguir alguna informacion.
La idea es que el usuario entre una sola vez y pueda bajar una informacion, y si desea intentarlo una segunda vez ya no pueda.
Gracias por cualquier ayuda
  #2 (permalink)  
Antiguo 07/02/2003, 08:32
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Bueno .. no hace falta buscar algo tan especifico .. creo q la solucíon está en pensar un pcoo solo .. no crees?

Sería algo así:

** Necesitas de un sistema para almacenar los usuarios o el usuario .. Puee ser un simple fichero de texto o una Base de datos. Una base de datos es mas facil de administrar .. pero si es poca cosa con un fichero de texto plano sobraaa.

Esta parte .. por lo menos leer el user|pass de un archivo segun un formato tipo:

user|pass
user2|pass2 (si fuera necesario .. etc)

Lo puedes hacer con las funciones de file() .. file_get_contents() .. y afines ..

** comparas el par user/pass con los datos q te vengan de un formulario HTML hacia este script...

** Si es correcto (user/pass) .. Entregas el archivo a descarga .. Lo mas seguro es usar cabeceras HTTP para decirle q tipo de archivo es el q envias y hacer un readfile() ...
Entregado el archivo .. borra el usuario de tu fichero de texto plano o de tu BD o donde lo guardes ..

Esta sería la teoría .. si quieres ponerte hacerlo .. ves preguntando dudas concretas .. si quieres algo hecho .. Busca en las FAQ's de PHP .. tienes un par de sistemas sobre autentificación (HTTP) .. eso será el primer paso .. pero luego tendras q enviar el archivo al navegador (tambien hay un ejemplo de cabeceras HTTP header() ... ) Lo único q tendrias q hacer tu es la parte de borrar al usuario de la BD o texto plano q use para guardarse sus usuarios ...

Como sugerencia .. Si usas Base de datos (mysql) .. puedes hacer un buen sistema y facil de administrar .. Puediendo guardar facilmente la fecha/hora en la que descargó el archivo .. colocando un flag de "lo descargó" y mirar eso antes de descargar .. con lo cual no borra el usuario sino solo lo deshabilitas para esa descarga .. etc etc etc ...

Un saludo,
  #3 (permalink)  
Antiguo 07/02/2003, 18:43
 
Fecha de Ingreso: febrero-2003
Mensajes: 2
Antigüedad: 14 años, 10 meses
Puntos: 0
Gracias

Saludos cluster,
La idea es usar una base datos, la creacion del usuario ya la tengo definida y todo funciona perfecto, uso las cabeceras, el site esta bien protegido, en donde estoy perdido es como borrar al usuario.
  #4 (permalink)  
Antiguo 07/02/2003, 20:35
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si para que tu usuario entre a su zona autorizada .. haces una consulta (query) a tu Base de datos tipo (o similar):

SELECT id,usuario,password FROM usuarios WHERE usuario='$usuario' AND password='$password'

Una vez entregado el archivo tan solo tienes que ejecutar otra consulta tipo:

mysql_query("DELETE FROM usuarios WHERE id='$id'");

(Obten el ID de tu registro si lo usas .. o algun campo(s) que identifiquen a ese registro como único .. para porderlo usar en esa consulta de borrado condicional)

Como ya te comenté .. podrias usar un campo extra tipo "ya se lo bajó" a modo de flag y tan solo hacerle un UPDATE .. En este caso concreto deberias usar un AND extra del tipo AND selobajo='no' en la consulta q haces la identificación del usuario .. o una consulta extra .. por ese campo ...

Como veras .. las opciones son infinitas si le hechas algo de imaginación .. Por mi parte yo siempre prefiero tener absoluto control .. En este caso me guardaria fecha de descarga y eso lo usaria como "flag" (bandera) .. así veo cuando se lo descargo por si hay reclamaciones .. Si borras al usuario no queda constancia por ningun sitio ...

Un saludo,
  #5 (permalink)  
Antiguo 13/03/2003, 14:46
 
Fecha de Ingreso: marzo-2003
Mensajes: 4
Antigüedad: 14 años, 9 meses
Puntos: 0
Y con descargas de ficheros?

Hola, estoy en algo parecido pero no encuetro la forma de hacerlo.

Quiero que el usuario pueda descargar un fichero de mi web pasando por un form con contraseña.

Si pongo un directorio con .htpasswd, consigo el efecto y la seguridad deseada pero debo limitarme a usar ficheros de texto.

Si quiero usar mi BD MySQL con los Passwords, fecha y otros datos de los usuarios, consigo que la gente descargue a través de contraseña, pero el directorio final no está protegido y cualquiera que teclee la URL de uno de estos ficheros desde la barra de dirección del navegador, se lo baja.

Mi intención es conseguir una seguridad como la del .htpasswd, pero utilizando una base de datos MySQL.

¿A alguien se le ocurre la forma de hacerlo o ha visto algún script que lo haga?

Gracias de antemano.
  #6 (permalink)  
Antiguo 13/03/2003, 16:17
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
pol73

Revisa:
http://www.forosdelweb.com/showthrea...hreadid=120685

Se trata de leer el archivo de cualquier directorio de tu sistio y entregarlo al navegador con las cabeceras HTTP adecuadas ..

Un saludo,
  #7 (permalink)  
Antiguo 13/03/2003, 18:44
 
Fecha de Ingreso: marzo-2003
Mensajes: 4
Antigüedad: 14 años, 9 meses
Puntos: 0
Gracias Cluster por tu rápida respuesta, pero creo que no es lo que estaba necesitando, es una buena herramienta sin duda, pero por lo que he podido entender revisando el código de forma rápida, no es lo que necesito.
Si lo he entendido bien este es un script para poder descargar archivos en varios "intentos" tipo get rigth y similares...

Yo lo único que quiero es algo tan sencillo como proteger un directorio de la web, gestionando los derechos de acceso desde un registro de usuarios incluido en un BD MySQL en lugar de hacerlo desde un fichero de texto. Solo voy a solicitar una password al cliente, aunque en el registro de usuario pida muchos otros datos necesarios para otros menesteres "estadísticos" de la web (es una web de comercio electrónico de descargas, por eso necesito la BD).

He encontrado multitud de scripts y recursos que ocultan la URL de destino, y e intentado adaptar scripts que sirven para restringir el acceso a páginas (en lugar de a downloads), pero aunque mis visitantes no conozcan la URL del directorio ni el nombre de los archivos contenidos en él, no me quedo tranquilo porque si teclean: www.dominio.com/dir_seguro/archivo.zip en un navegador, me vacían el directorio o lo publican en un foro... y me fastidian. Necesito una verdadera seguridad porque mi cliente me lo exige.

Si pongo un .htaccess y un .htpaswd de apache en el directorio, independientemente de que todo el mundo sepa donde están los archivos, si no tienes clave, no pasas, pero lamentablemente el fichero tipo .txt se me queda corto. Necesito almacenar los datos en una DB.

¿Existe algún sistema PHP que funcione protegiendo el directorio entero? ¿se podría adaptar algún otro script de seguridad para obtener resultados similares o parecidos?

Gracias de nuevo a todos
  #8 (permalink)  
Antiguo 13/03/2003, 19:44
 
Fecha de Ingreso: febrero-2002
Ubicación: ¿donde vivo? pues en mi casa, ¿donde voy a vivir?...
Mensajes: 214
Antigüedad: 15 años, 9 meses
Puntos: 0
Si necesitas una verdadera seguridad, pq tu cliente te lo exije, y no eres capaz de darsela por ti mismo en algo tan simple, deberias exigirte a ti mismo, ser honesto con tu cliente, y decirle q ponga la seguridad de su sistema en manos más expertas, piensalo, ten en cuenta q te estás haciendo RESPONSABLE de la seguridad de un sistema, y q no sabes hacerlo, y q si falla, tu cliente, te va a exigir explicaciones, y posibles remuneraciones por los posibles daños causados.

Puede q suene algo duro mi tono, pero si te paras a pensarlo, te la estás jugando, y solo te aviso.

Ahora, simplemente te digo, como ayuda:

1.- dices q si pone http://www.servidor.com/laruta/file.zip te joden...

te joden, si les dejas hacer eso... joer, eso es un concepto basikisimo de seguridad, es tu servidor, tu decides donde tienen acceso, o no?.

2.- El file no tiene pq estar en el sistema de archivos del pc. (si te suena raro,o piensas q me refiero a q este en otro pc, o algo así, te vuelvo a decir q te replantees el decirle a tu cliente q delegue el asunto en otra persona, simplemente como consejo)

3.- hay algo llamado cifrado, encriptacion, etc..

y bueno, con esto, deberias poder sacar el problema adelante, aunq en cuestiones de seguridad hay muchos más factores a ener en cuenta.

P.D, Aclaro, pq se q siempre se me tacha de borde, y so tu tb lo piensas, te aclaro q solo soy realista, y hablo de manera clara y concisa, y digo lo q pienso, y en este caso, lo q pienso es q si alguien delega LA RESPONSABILIDAD de la seguridad de su sistema en ti, y te exije q sea seguro, y demuestas en este post q no sabes, creo q para evitar problemas a tu cliente, y a ti mismo, puesto q el cliente te puede exijir responsabilidades si algo falla, considero q lo justo es q seas honesto, y o bien se lo digas a clietne, o subcontrates a otra persona (por el tema imagen tuya, o de tu empresa, q si, tb hay q tenerlo en cuenta, lo se).
__________________
Linux, es para los que odian Microsoft/Windows, BSD, es para los que amamos *IX.
  #9 (permalink)  
Antiguo 14/03/2003, 04:15
 
Fecha de Ingreso: marzo-2003
Mensajes: 4
Antigüedad: 14 años, 9 meses
Puntos: 0
Para empezar mi cliente es mi cuñado y la página que le estoy haciendo "de gratis" y para aprender ha sido idea mía, lo cual no quita que prefiera hacer las cosas como se deben hacer porque si este "encargo" sale bien probablemente me salgan más trabajos "de pago" en un futuro. Quiere esto decir que "mi cliente" sabe perfectamente con quien está tratando, la poca experiencia que tengo y las ganas de aprender y de hacer las cosas bien, por eso espera mucho de mí. Y por eso mi insistencia en que sea lo más seguro posible, porque aunque fuese un sitio personal yo querría la misma seguridad y no obstánte este post puede servir en un futuro tanto a gente profesional como aficionada. Creo que tu respuesta fuera de tono sobra, la verdad.

Por otro lado si pusises tanto esmero en explicar los conceptos técnicos como lo haces para justificar tu mala uva, quizás alguien que lea tu post se hubiese enterado de algo. Evidente los que ya saben la respuesta habrán conseguido "desencriptar" tu mensaje, pero los que no hemos nacido enseñados y utilizamos los foros para lo que en realidad sirven, que es para aprender lo que NO sabemos, no hemos entendido ni papa.

¿Es este un foro para gente que ya sabe? ¿es un crimen preguntar sin tener los conociminetos "basikísimos"? ¿Debo sentir verguenza por por no entender lo que dices?

En fin, vamos al tema que para eso estamos aquí. Por lo que he podido entender de tu post creo que te refieres a que los archivos los ponga por encima del material de la web accesible desde el navegador. Por ejemplo en un directorio /home/secure si la web está en otro más abajo: /home/sites/web. He probado esto pero redireccionando con un header() el navegador me dice que no encuentra la página, supongo que será normal porque si yo pudiese acceder así, estaríamos en las mismas, todos pueden meter directamente la ruta y bajar el archivo.

La emcriptación se lo que es, de hecho la he usado con el .htpasswd para cifrar las contraseñas, pero si fueras tan amable tu o cualquier otro que lo sepa, de explicarme como aplicarlo a este caso, para evitar que el directorio sea accesible directamente, pero sí a través de la contraseña.

Como ya te he dicho he probado varias formas de solicitar Password, pero quitando la del .htpaswd en todas las demás lo que consigo es ocultar la url tras "un velo", pero si el navegante la descubre de cualquier forma (aunque sea de casualidad, con un soft que cree convinaciones más o menos lógicas), los archivos son suyos. Ten en cuenta que una vez se baje algún archivo pagando, tendrá el nombre del archivo y si se baja varios puede descubrir una "norma lógica de nomenclatura" de los restantes ficheros, con lo cual solo tendría que sabe la ruta al directorio.

Creo que más o menos he entendido lo que me explicas. Se trataría de ocultar el directorio emcriptando su nombre para que se llame "%&$)("·!\\~#" o algo así inaccesible o invisible desde web y en el script que llama al archivo con el $PHP_AUTH_PW , si adivina la ruta, desemcripto y bajo el archivo. De esta forma si adivina la ruta real: /secure/file.zip y la teclea directamente sin desemcriptar no pirula y si descubre el galimatías de nombre emcriptado el navegador no lo reconoce.

GENIAL, MUCHAS GRACIAS, pero ¿alguien puede recomendarme algún script que haga algo parecido o adaptable a este caso?
Cuando lo tenga acabado lo pegaré aquí para que la gente que esté en mi situación en un futuro lo pueda aprobechar.

Bueno perdona si yo también me he puesto un poco borde al principio, pero es que en lugar de contestar y aclararme las dudas te dió por ponerme verde .

Espero que no te mosquees.
  #10 (permalink)  
Antiguo 14/03/2003, 09:35
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Tan solo con mover tus archivos FUERA del document_root y llamandolos como el ejemplo de la FAQ que te dejé resuelves el tema de que te hagan un http://www.tuweb.tal/directorio_archivos/archivo.tal

Esto es así porque quien "entragaría" el archivo solicitado al navegador sería PHP leyendolo del sistema de archivos del Servidor y generando las cabeceras HTTP necesarias para indicarle al cliente (navegador) q tipo de archivo se va a enviar o como ha de entenderlo (que es un attachment y como tal q inicie de la descarga) ...

Esas descargas lo controla PHP y por ende puedes poner cualquier tipo de condiciona antes para dar o no dar el fichero solicitado .. bien sea un simple "if" con unos pocos usuarios en un array o en simples variables o un sistema de usuarios adminstrado por una Base de datos ..

Sobre el "get" y .htaccess .. tienes toda la información en el manual oficial de Apache . ahí veras las directivas necesarias para proteger directorios por si quieres tener tu directorio de descargas bajo el document_root (en un servicio de hosting suele ser el ../www/html ... en un phpinfo() lo puedes ver)

Si quieres un script ya hecho .. visita hotscripts.com ahí veras muchos scripts de gestion de descargas con o sin sistema de usuarios integrado. Solo recuerda lo que te digo sobre usar un .htaccess (q igual alguno lo incluye) .. o bien sacar Fuera de tu document_root el directorio donde guardes tus archivos a descargar..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #11 (permalink)  
Antiguo 14/03/2003, 12:47
 
Fecha de Ingreso: febrero-2002
Ubicación: ¿donde vivo? pues en mi casa, ¿donde voy a vivir?...
Mensajes: 214
Antigüedad: 15 años, 9 meses
Puntos: 0
Bien si tu "cliente", es tu cuñado, y se lo haces como un favor, en mi mundo, ya no es un cliente.
eso de entrada :).

Y me parece genial q kieras aprender, de verdad, no hay ironia alguna, y yo mismo te ayduaré si lo necesitas, pero el modo de aprender, es desde el principio, hay un refran q dice algo sobre una casa, y empezarla por el tejado, pues eso es lo q pasa en este caso.
Aparte, que en la informatica, y mucho mas en los campos donde kieres adentrarte, la mejor ayuda q encontraras, eres tu mismo y:

- Tu capacidad de pensamiento.
- Tu capacidad de pensamiento LÓGICO.
- Tu tesón.
- Tu aficion a la lectura (manuales, libros, RFCS...)

No te tomes estos puntos como un insulto, o como q te esté diciendo q carezcas de ellos, sobretodo los 2 primeros, pq no es así.

En la informatica en general, se requiere una base, de conocimientos y CONCEPTOS, y si encima te adentras en campos como la programacion, mucho mas, y si encima kieres ir "más allá", como es tu caso (seguridad informatica), esa base, y esos conceptos, se multiplican de manera expectacular, amén de citar la capacidad o disponibilidad o posibilidad, de estar al día en ese campo.

Por lo tanto, me parece genial q kieras aprender, pero eso, lleva su tiempo y más en este tipo de cuestiones. por lo tanto, antes de poder hacer algo asi, pro it mismo, considero q debes estudiar, y mucho. "antes de correr, hay q aprender a andar". Y creo q con esto dejo clara mi postura.

En cuanto a que tu "cliente" sabe que tienes oca experiencia, ya no digo nada al respecto, mi comentario, fuera de tono, segun tu, era referido a q tratases con un cliente real, el cual pudiese hacerte responsable de la seguridad del sistema y sus posibles perdidas. Lo cual, ya q es un favor a tu cuñado, es poco probable q te pida daños y perjuicios si te revientan el sistema.
Aunque en una cosa si te doy la razón, es probable q le pongas más ganas q un profesional, y q por eso tu cuñado te apoye, pero también te digo, y no te molestes, q por muchas ganas q le pongas, no es posible q adkieras los conocimientos de un profesional (q lleva años de estudios a sus espaldas, ademas de "trasteos" en cuanto a seguroidad se refiere), en cuestion de dias o semanas, pero si, es muy probable q ganas, pongas tu mas. en eso si te doi la razon.

mi mensaje no iba con mala uva, solo trataba de ser coherente, y pretendia q una persona, q aparentemente estaba cobrando por un servicio q no era capaz de dar, lo fuese tab, asi, como hacerle ver las responsabilidades q tenia.

Mi post no estaba encriptado, simplemente hacia alusion a conceptos basicos, q cualkier persona q kiera dedicarse a esto, debe saber, q ocmo te dije son necesarios, pero luego los explico, descuida.

Este foro, no es para gente q sabe, ni q no sabe, pero como ya dije, si kieres correr, primero aprende a andar. Y no, no debes sentir verguenza por no saber, evidentemente, nadie lo sbe todo, pero lo q si hay q saber, es "saber aprender", cosa q por lo q he visto tanto aki en los foros, como en otros canales de ayuda, no suele saberse, la gente normalmente kiere o bien una solucion a un problema concreto, o bien algo ya hecho. (tu mismo pides algo hecho unas lienas mas abajo), y eso, para mi, no tiene cabida. "aprende a aprender" y a empezar desde abajo, o por el principio, como kieras decirlo.

y ahora como tu dices, vamos al tema:

si tu tienes el doc. root en:

/home/secure/web

y pones los archivos en:
/home/secure/

EVIDENTEMENTE el httpd, no tendrá acceso a ellos (concepto básico). Y por eso, el header() a ese directorio, te dice q naranjas ed la china.

Pero, php, si puede tener acceso a ese directorio, aunq bueno, ahí hay q tener cuidado y ver hasta donde se le deja acceder a php.

Otra cosa, es q "pienses a la inversa", q es a lo q yo me referia realmente al principio.

tu tienes
/home/sercure/web
como doc. root.

bien, pues crea

/home/secure/web/files

y no dejes acceder a ningun usuario. y q sea php kien se encargue. esto son conceptos basicos...

En cuanto a encriptacion, hay sistemas para encriptar archivos (no el nombre, sino el archivo en si, pero este concepto es largo de explicar).

a ver, los .htpaswd q dices (combinados con .hatacces) te limitan el acceso a directorios, esto está en el manual del apache (q supongo q es el httpd q usas, = q supongo q no has leido el manual). Bueno, en cualquier caso, combinacion de lo q te dije arriba, con .htacces, es una solucion, lo ves, no? :?


Dejate de velos, y de historias,lo q tienes q hacer es limitar "fisicamente" el acceso, no esconderlo.

ya te he dado soluciones, y ahora sigo con más.

Aunq tu problema, por lo q veo, es q tp tienes claro q es php y como trabaja, pq no he visto q hayas hecho, o al menos dicho aki, de ningun apoyo o intento en php de hacer lo q kieres.

Dices q has probado formas de solucitar passwd, y si, es una forma, pero si tienes acceso directo a donde estan los archivos, es tonteria, tu mismo lo dices, pero no dejas de dar vueltas al rededor de la contraseña...

Asi q, te repito, no se trata de ocultar nada, sino de prohibir el acceso. el hecho de pedir contraseña es un valor añadido, pero nada más.

Y no se trata de q tenga acceso el httpd, precisamente, la opcion mas segura, es q el httpd no tenga acceso a esos files.

Cita:
GENIAL, MUCHAS GRACIAS, pero ¿alguien puede recomendarme algún script que haga algo parecido o adaptable a este caso?
Lo q te decia, esta no es la forma de aprender.. la forma de aprender, es ahacerlo por ti mismo.
Y creo q ahora, no podrás decir q no te he dado datos, y q te no te he explicado.

Aaprte, creo recordar, q tb dije q el archivo no tenia pq estar en el sistema de archivos, esto, tb te lo explico.

pudes, como habras leido en el foro, incluir el file en una db, aunq a mi no me gusta ehacer esto, pero es otra solucion.

Y no, no me moskeo, estoy acostumbrado a q me llamen borde kienes no saben ver, o no kieren ver, q hay un camino unico para aprender y ese camino, es empezar gateando desde el principio, para llegar corriendo al destino.

Aparte, de q bueno, admito q kiza sea demasiado directo/tajante a la hora de expresarme, pero bueno.. q se le va hacer, soy así
__________________
Linux, es para los que odian Microsoft/Windows, BSD, es para los que amamos *IX.
  #12 (permalink)  
Antiguo 14/03/2003, 14:26
 
Fecha de Ingreso: marzo-2003
Mensajes: 4
Antigüedad: 14 años, 9 meses
Puntos: 0
Bueno, gracias de nuevo a todos.

Para ser sincero NeBeRuS he de decir que tienes razón en muchas de las cosas que dices, no obstánte hay algo en lo que discrepo:

Una de las grandes ventajas de PHP es que es de código abierto y mucha gente trabaja sobre él y publica gratuitamente sus aplicaciones o scripts para que otros las mejoren o las aprobechen o las adapten a sus necesidades.

Empezar de cero es ideal si dispones de mucho tiempo, pero también fijarte en el trabajo de otros es una forma muy válida de aprender. Es cierto que prácticamente estoy empezando en esto, pero no veo que hay de malo en utilizar códigos que otros han decidido compartir. Hacer lo contrario sería "re-inventar la rueda", lo cual puede dar mucha satisfacción al que lo haga, pero hoy en día no estamos como para ir perdiendo mucho tiempo... al menos yo.

Bueno voy a probar muchas de las cosas que me habéis pasado, aver que sale de todo esto.
Muchas gracias de nuevo a todos, sois geniales.
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 06:22.