NO poder saber la URL de un archivo descargado.

08/01/2008 - 19:13 por ~jose~ | Informe spam
Hola, que tal?, Feliz año a todos.

Bueno, mi problema es el siguiente.
Tengo una web que para hacer descargas de archivos hay que ingresar un
código en un textbox y este es el que permite la descarga o no. Si la
permite con un response.redirect() el cliente puede descargalo. Hasta
aquí todo bien, el problema es que el cliente no tiene que poder saber
desde donde se ha descargado el archivo bien sea para que no vaya
directamente a la url y lo descargue otra vez o para que no intente
adivinar las otras descargas que existen en esa carpeta. He estado
probando con eliminar la cache mediante estos códigos:

<%
Response.Expires = 60
Response.Expiresabsolute = Now() - 1
Response.AddHeader "pragma","no-cache"
Response.AddHeader "cache-control","private"
Response.CacheControl = "no-cache"
%>

Pero si el cliente es un pelín avispado si vas a la carpeta de
archivos temporales mientras se está descargando el archivo, se puede
ver perfectamente toda la URL entera.

Por si acaso os digo que NO tengo acceso al servidor, eh!, es servidor
de pago, lo digo por si se os ocurre alguna solución en la que haya
que tocar el servidor.

Bueno, pues eso, si me podéis ayuda..., cualquier sugerencia (o
solución, jejeje) será bien venida.

Un saludo,
jose

Preguntas similare

Leer las respuestas

#1 ~jose~
09/01/2008 - 14:26 | Informe spam
Hola, que tal?
Sobre la solución que propones, creo que sabré hacerla excepto el
último punto.
Si descargo el archivo con un response.redirect() las lineas de código
que le siguen no se ejecutan (probé con response.write...) entonces
como puedo eliminar la copia si se ha interrumpido el código? y... ya
podré eliminar la copia si se supone que se está descargando el
archivo?

Y sobre lo de...
hay varias


Que otras formas se te ocurren (si no encontramos solución para las
preguntas que he hecho sobre la propuesta)?

Gracias y un saludo
jose

hay varias
Por ejemplo, cuando el cliente pide el archivo:
- generas una palabra alfanumérica de manera aleatoria
- haces una copia de tu fichero
- renombras la copia con el alfanumerico
- descargas la copia
- borras la copia

Cuando quieran ver el origen o saltarse la linea de descarga no encontrarán
el archivo.


> ¥-- Lombar --¥
Jose Lombardia

> Visita mi blog:
Comer y Rodarwww.lombar.com
>
"~jose~" escribió en el mensaje de noticiasnews:
Hola, que tal?, Feliz año a todos.

Bueno, mi problema es el siguiente.
Tengo una web que para hacer descargas de archivos hay que ingresar un
código en un textbox y este es el que permite la descarga o no. Si la
permite con un response.redirect() el cliente puede descargalo. Hasta
aquí todo bien, el problema es que el cliente no tiene que poder saber
desde donde se ha descargado el archivo bien sea para que no vaya
directamente a la url y lo descargue otra vez o para que no intente
adivinar las otras descargas que existen en esa carpeta. He estado
probando con eliminar la cache mediante estos códigos:

<%
Response.Expires = 60
Response.Expiresabsolute = Now() - 1
Response.AddHeader "pragma","no-cache"
Response.AddHeader "cache-control","private"
Response.CacheControl = "no-cache"
%>

Pero si el cliente es un pelín avispado si vas a la carpeta de
archivos temporales mientras se está descargando el archivo, se puede
ver perfectamente toda la URL entera.

Por si acaso os digo que NO tengo acceso al servidor, eh!, es servidor
de pago, lo digo por si se os ocurre alguna solución en la que haya
que tocar el servidor.

Bueno, pues eso, si me podéis ayuda..., cualquier sugerencia (o
solución, jejeje) será bien venida.

Un saludo,
jose
Respuesta Responder a este mensaje
#2 ~jose~
09/01/2008 - 19:50 | Informe spam
Hola, muy buenas,

si tienes la posibilidad de utilizar el componente aspupload



como puedo saber si tengo el componente aspupload?
He hecho lo que me has pedido y no me funciona, ni siquiera muestra la
página.
He creado una base de datos llamada BDdescargas.mdb, un campo es
"codigofichero" con el código de ejemplo "123" y otro campo con el
nombre "nombre" con el nombre del archivo a descargar, ejemplo
"blabla.rar"
(Te digo esto por si he hecho algo mal)
El código que he empleado es este:

<%
set FSO = server.createObject("Scripting.FileSystemObject")
fichero=Server.MapPath("carpeta/donde/estan/
archivos/"&request.querystring("fi"))
if (fso.FileExists(fichero)) then
Set Upload = Server.CreateObject("Persits.Upload")
Upload.SendBinary fichero, True, "application/octet-stream", True

end if%>

<%
Set base = Server.CreateObject("ADODB.Connection")
base.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" &
Server.MapPath("\mdb\BDdescargas.mdb"))
set rst = CreateObject("ADODB.Recordset")

set rst=base.execute("select * from ficheros where
codigofichero='"&request.querystring("fi")&"' ")
if not rst.eof then
elfichero=rst("nombre")
fichero=Server.MapPath("carpeta/donde/estan/archivos/"&elfichero)
if (fso.FileExists(fichero)) then
Set Upload = Server.CreateObject("Persits.Upload")
Upload.SendBinary fichero, True, "application/octet-stream", True

end if
else
response.redirect("error.asp")
end if%>

De este código sólo he añadido lo que es la conexión a la BD
Quizás no disponga del aspupload?

Que puedo hacer?
Venga! un saludo y gracias
jose

creas un fichero que se llame descargar.asp:
<%
set FSO = server.createObject("Scripting.FileSystemObject")
fichero=Server.MapPath("documentos/servicios/"&request.querystring("fi"))
if (fso.FileExists(fichero)) then
 Set Upload = Server.CreateObject("Persits.Upload")
 Upload.SendBinary fichero, True, "application/octet-stream", True

end if%>

y le pasas el nombre del fichero por querystring.
Tambien para que no viese el nombre del fichero podrias pasar el id del
fichero o un codigo (esto es mejor por si le da por poner ids diferentes)
luego buscas el fichero en la bd y lo descaragas
<%set rst=base.execute("select * from ficheros where
codigofichero='"&request.querystring("fi")&"' ")
if not rst.eof then
elfichero=rst("nombre")
fichero=Server.MapPath("documentos/servicios/"&elfichero)
if (fso.FileExists(fichero)) then
 Set Upload = Server.CreateObject("Persits.Upload")
 Upload.SendBinary fichero, True, "application/octet-stream", True

end if
else
response.redirect("error.asp")
end if%>

saludos
urko

"~jose~" escribió en el mensajenews:
Hola, que tal?, Feliz año a todos.

Bueno, mi problema es el siguiente.
Tengo una web que para hacer descargas de archivos hay que ingresar un
código en un textbox y este es el que permite la descarga o no. Si la
permite con un response.redirect() el cliente puede descargalo. Hasta
aquí todo bien, el problema es que el cliente no tiene que poder saber
desde donde se ha descargado el archivo bien sea para que no vaya
directamente a la url y lo descargue otra vez o para que no intente
adivinar las otras descargas que existen en esa carpeta. He estado
probando con eliminar la cache mediante estos códigos:

<%
Response.Expires = 60
Response.Expiresabsolute = Now() - 1
Response.AddHeader "pragma","no-cache"
Response.AddHeader "cache-control","private"
Response.CacheControl = "no-cache"
%>

Pero si el cliente es un pelín avispado si vas a la carpeta de
archivos temporales mientras se está descargando el archivo, se puede
ver perfectamente toda la URL entera.

Por si acaso os digo que NO tengo acceso al servidor, eh!, es servidor
de pago, lo digo por si se os ocurre alguna solución en la que haya
que tocar el servidor.

Bueno, pues eso, si me podéis ayuda..., cualquier sugerencia (o
solución, jejeje) será bien venida.

Un saludo,
jose
Respuesta Responder a este mensaje
#3 ~jose~
09/01/2008 - 19:55 | Informe spam
Hola, que tal?
Pero si sabes mas
o menos cuanto es el tiempo que puede durar una descarga.


Esto es muy dificil, y si el usuario tiene modem y le cuesta mucho
descargar? y si el usuario empieza a descargar y pausa la descarga?,
mmm...

No te parece un poco complicadillo?
se te ocurre alguna otra cosa?
Gracias por intentar ayudarme
jose.

sencilla subrutina que te borre por tiempo. Si por ejemplo cada cadena la
empiezas por 4 digitos que representen la hora y los minutos, puedes hacer
que cuando alguien entre en la página principal borre los que tienen mas de
cierta antigüedad y por el propio nombre la puedes conocer.


> ¥-- Lombar --¥
Jose Lombardia

> Visita mi blog:
Comer y Rodarwww.lombar.com
>
"~jose~" escribió en el mensaje de noticiasnews:
Hola, que tal?
Sobre la solución que propones, creo que sabré hacerla excepto el
último punto.
Si descargo el archivo con un response.redirect() las lineas de código
que le siguen no se ejecutan (probé con response.write...) entonces
como puedo eliminar la copia si se ha interrumpido el código? y... ya
podré eliminar la copia si se supone que se está descargando el
archivo?

Y sobre lo de...>hay varias

Que otras formas se te ocurren (si no encontramos solución para las
preguntas que he hecho sobre la propuesta)?

Gracias y un saludo
jose



> hay varias
> Por ejemplo, cuando el cliente pide el archivo:
> - generas una palabra alfanumérica de manera aleatoria
> - haces una copia de tu fichero
> - renombras la copia con el alfanumerico
> - descargas la copia
> - borras la copia

> Cuando quieran ver el origen o saltarse la linea de descarga no
> encontrarán
> el archivo.


> > > ¥-- Lombar --¥
> Jose Lombardia
>
> > > Visita mi blog:
> Comer y Rodarwww.lombar.com
> >
> "~jose~" escribió en el mensaje de
> noticiasnews:
> Hola, que tal?, Feliz año a todos.

> Bueno, mi problema es el siguiente.
> Tengo una web que para hacer descargas de archivos hay que ingresar un
> código en un textbox y este es el que permite la descarga o no. Si la
> permite con un response.redirect() el cliente puede descargalo. Hasta
> aquí todo bien, el problema es que el cliente no tiene que poder saber
> desde donde se ha descargado el archivo bien sea para que no vaya
> directamente a la url y lo descargue otra vez o para que no intente
> adivinar las otras descargas que existen en esa carpeta. He estado
> probando con eliminar la cache mediante estos códigos:

> <%
> Response.Expires = 60
> Response.Expiresabsolute = Now() - 1
> Response.AddHeader "pragma","no-cache"
> Response.AddHeader "cache-control","private"
> Response.CacheControl = "no-cache"
> %>

> Pero si el cliente es un pelín avispado si vas a la carpeta de
> archivos temporales mientras se está descargando el archivo, se puede
> ver perfectamente toda la URL entera.

> Por si acaso os digo que NO tengo acceso al servidor, eh!, es servidor
> de pago, lo digo por si se os ocurre alguna solución en la que haya
> que tocar el servidor.

> Bueno, pues eso, si me podéis ayuda..., cualquier sugerencia (o
> solución, jejeje) será bien venida.

> Un saludo,
> jose- Ocultar texto de la cita -

- Mostrar texto de la cita -
Respuesta Responder a este mensaje
#4 ~jose~
09/01/2008 - 20:26 | Informe spam
Hola otra vez,
he estado haciendo pruebas y ya me empieza a tirar el error en esta
linea:

Set Upload = Server.CreateObject("Persits.Upload")

esto de : Persits.Upload que es?, es lo de aspupload?

Un saludo
jose

si tienes la posibilidad de utilizar el componente aspupload
creas un fichero que se llame descargar.asp:
<%
set FSO = server.createObject("Scripting.FileSystemObject")
fichero=Server.MapPath("documentos/servicios/"&request.querystring("fi"))
if (fso.FileExists(fichero)) then
 Set Upload = Server.CreateObject("Persits.Upload")
 Upload.SendBinary fichero, True, "application/octet-stream", True

end if%>

y le pasas el nombre del fichero por querystring.
Tambien para que no viese el nombre del fichero podrias pasar el id del
fichero o un codigo (esto es mejor por si le da por poner ids diferentes)
luego buscas el fichero en la bd y lo descaragas
<%set rst=base.execute("select * from ficheros where
codigofichero='"&request.querystring("fi")&"' ")
if not rst.eof then
elfichero=rst("nombre")
fichero=Server.MapPath("documentos/servicios/"&elfichero)
if (fso.FileExists(fichero)) then
 Set Upload = Server.CreateObject("Persits.Upload")
 Upload.SendBinary fichero, True, "application/octet-stream", True

end if
else
response.redirect("error.asp")
end if%>

saludos
urko

"~jose~" escribió en el mensajenews:
Hola, que tal?, Feliz año a todos.

Bueno, mi problema es el siguiente.
Tengo una web que para hacer descargas de archivos hay que ingresar un
código en un textbox y este es el que permite la descarga o no. Si la
permite con un response.redirect() el cliente puede descargalo. Hasta
aquí todo bien, el problema es que el cliente no tiene que poder saber
desde donde se ha descargado el archivo bien sea para que no vaya
directamente a la url y lo descargue otra vez o para que no intente
adivinar las otras descargas que existen en esa carpeta. He estado
probando con eliminar la cache mediante estos códigos:

<%
Response.Expires = 60
Response.Expiresabsolute = Now() - 1
Response.AddHeader "pragma","no-cache"
Response.AddHeader "cache-control","private"
Response.CacheControl = "no-cache"
%>

Pero si el cliente es un pelín avispado si vas a la carpeta de
archivos temporales mientras se está descargando el archivo, se puede
ver perfectamente toda la URL entera.

Por si acaso os digo que NO tengo acceso al servidor, eh!, es servidor
de pago, lo digo por si se os ocurre alguna solución en la que haya
que tocar el servidor.

Bueno, pues eso, si me podéis ayuda..., cualquier sugerencia (o
solución, jejeje) será bien venida.

Un saludo,
jose
Respuesta Responder a este mensaje
#5 ~jose~
12/01/2008 - 19:50 | Informe spam
Hola que tal?
la solución a mi problema se podría adaptar con el código que me
habeis propuesto de esta url:
http://www.buayacorp.com/archivos/p...-aspnet-2/

el problema es que es aspx y necesito ejecutar el aspx desde un asp.
Dado que me parece que podría ser otro tema, lo he puesto en un nuevo
post.
Gracias por todo y a ver si se os ocurre algo, vale?
un saludo
jose




Realmente tu solución es de servidor.
En servidores Apache hay un fichero llamado .htaccess en elc ual puedes
fijar ciertas directrices, por ejemplo de session. De esa manera crearias
una sesion que expire en ciertos minutos y entras a la carpeta de descarga.
Si entras directo no hay session y le redireccionas a la pagina.
En IIS la cosa no es tan sencilla. Existe una aplicacion de servidor llamada
IISpassword que se instala en el servidor y que hace ese cometido, pero
pocos hosting la tienen implementada. Para el cliente final se comporta como
un objeto, como ASPemail, ASPupload,...

El tema de renombrar es lioso y malo. Aumentas la carga del servidor y si
tienes muchas descargas podrías llenar tu espacio de replicas del mismo
archivo.


> ¥-- Lombar --¥
Jose Lombardia

> Visita mi blog:
Comer y Rodarwww.lombar.com
>
"~jose~" escribió en el mensaje de noticiasnews:
Hola, que tal?> Pero si sabes mas
> o menos cuanto es el tiempo que puede durar una descarga.

Esto es muy dificil, y si el usuario tiene modem y le cuesta mucho
descargar? y si el usuario empieza a descargar y pausa la descarga?,
mmm...

No te parece un poco complicadillo?
se te ocurre alguna otra cosa?
Gracias por intentar ayudarme
jose.



> sencilla subrutina que te borre por tiempo. Si por ejemplo cada cadena la
> empiezas por 4 digitos que representen la hora y los minutos, puedes hacer
> que cuando alguien entre en la página principal borre los que tienen mas
> de
> cierta antigüedad y por el propio nombre la puedes conocer.


> > > ¥-- Lombar --¥
> Jose Lombardia
>
> > > Visita mi blog:
> Comer y Rodarwww.lombar.com
> >
> "~jose~" escribió en el mensaje de
> noticiasnews:
> Hola, que tal?
> Sobre la solución que propones, creo que sabré hacerla excepto el
> último punto.
> Si descargo el archivo con un response.redirect() las lineas de código
> que le siguen no se ejecutan (probé con response.write...) entonces
> como puedo eliminar la copia si se ha interrumpido el código? y... ya
> podré eliminar la copia si se supone que se está descargando el
> archivo?

> Y sobre lo de...>hay varias

> Que otras formas se te ocurren (si no encontramos solución para las
> preguntas que he hecho sobre la propuesta)?

> Gracias y un saludo
> jose

> > hay varias
> > Por ejemplo, cuando el cliente pide el archivo:
> > - generas una palabra alfanumérica de manera aleatoria
> > - haces una copia de tu fichero
> > - renombras la copia con el alfanumerico
> > - descargas la copia
> > - borras la copia

> > Cuando quieran ver el origen o saltarse la linea de descarga no
> > encontrarán
> > el archivo.


> > > > > ¥-- Lombar --¥
> > Jose Lombardia
> >
> > > > > Visita mi blog:
> > Comer y Rodarwww.lombar.com
> > >
> > "~jose~" escribió en el mensaje de
> > noticiasnews:
> > Hola, que tal?, Feliz año a todos.

> > Bueno, mi problema es el siguiente.
> > Tengo una web que para hacer descargas de archivos hay que ingresar un
> > código en un textbox y este es el que permite la descarga o no. Si la
> > permite con un response.redirect() el cliente puede descargalo. Hasta
> > aquí todo bien, el problema es que el cliente no tiene que poder saber
> > desde donde se ha descargado el archivo bien sea para que no vaya
> > directamente a la url y lo descargue otra vez o para que no intente
> > adivinar las otras descargas que existen en esa carpeta. He estado
> > probando con eliminar la cache mediante estos códigos:

> > <%
> > Response.Expires = 60
> > Response.Expiresabsolute = Now() - 1
> > Response.AddHeader "pragma","no-cache"
> > Response.AddHeader "cache-control","private"
> > Response.CacheControl = "no-cache"
> > %>

> > Pero si el cliente es un pelín avispado si vas a la carpeta de
> > archivos temporales mientras se está descargando el archivo, se puede
> > ver perfectamente toda la URL entera.

> > Por si acaso os digo que NO tengo acceso al servidor, eh!, es servidor
> > de pago, lo digo por si se os ocurre alguna solución en la que haya
> > que tocar el servidor.

> > Bueno, pues eso, si me podéis ayuda..., cualquier sugerencia (o
> > solución, jejeje) será bien venida.

> > Un saludo,
> > jose- Ocultar texto de la cita -

> - Mostrar texto de la cita -- Ocultar texto de la cita -

- Mostrar texto de la cita -
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida