Pregunta

El trabajo en cuestión:

Quiero asegurarme de que los usuarios de mi sitio web vean una página antes de iniciar una descarga.Si no han mirado la página pero intentan vincular directamente los archivos, deben ir a la página web antes de que se permita la descarga.

¿Alguna sugerencia que sea mejor que mi idea de enviar una cookie y, antes de que comience la descarga, verificar si la cookie existe (a través de .htaccess)?

La página web y los archivos de descarga se ubicarán en servidores diferentes.

Ambiente:

  • Apache 2 en todas las máquinas
  • PHP 5 en todas las máquinas
  • MySQL 5 disponible en el servidor "página web" (sin acceso desde los servidores de descarga)

Nathan preguntó cuál es el problema que intento resolver y, de hecho, es que quiero evitar los enlaces directos de, por ejemplo, foros.Si las personas descargan desde nuestro servidor, utilizando nuestro ancho de banda, quiero mostrarles una página con un anuncio antes de que comience la descarga.No es necesario que sea totalmente seguro, pero necesitamos ganar algo de dinero para financiar los servidores, ¿verdad?:)

¿Fue útil?

Solución 6

voy a usar mod_auth_token para asegurarse de que el usuario tenga un "enlace reciente".

Con mod_auth_token puedes crear enlaces que caducan, es decir.Si alguien decide tomar un enlace existente y publicarlo en otro sitio web, este enlace caducará después de un tiempo específico.Eso dará como resultado un 403 PROHIBIDO que puedo detectar y redirigir al usuario a la página HTML en la que lo quiero.

Otros consejos

En lugar de permitir la vinculación directa a los archivos, guárdelos fuera de una ruta accesible desde la web.En su lugar, haga que las solicitudes de descarga vayan a un script php que inicia la descarga.Puede establecer controles para asegurarse de que la página solicitante sea la que desea leer.

Un Apache mod_rewrite RewriteRule puede hacer esto.

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://www.example.com/page.html$
RewriteRule file.exe http://www.example.com/page.html [R=301,L]

Básicamente, si una solicitud de file.exe no vino con page.html como referente, redirigirá 301 al usuario a page.html.

Podrías usar lado del servidor distribuido sesiones en lugar de cookies, pero eso probablemente sea más problemático de lo que vale la pena.

tu también podrías prohibir el acceso a solicitudes sin un referente o con un referente incorrecto.Pero eso es incluso más falsificable que una galleta.

Dependería de cuánto te importe.

La solución aquí depende del problema que esté intentando resolver.Si solo está intentando asegurarse de que un enlace directo no se publique en foros y demás, entonces simplemente verificar la referencia con .htaccess debería ser suficiente.Por supuesto, el referente se puede falsificar con bastante facilidad, por lo que si el riesgo de que alguien haga eso es un problema, entonces deberá hacer algo más.

Una cookie debería funcionar si necesita algo un poco más seguro.No podemos simplemente usar sesiones php porque el servidor de archivos y el servidor web están en cajas diferentes.Pero podríamos crear una cookie basada en un hash de tiempo y algún valor secreto.

cookievalue = sha1('secretvalue'.date('z-H'));

Cuando el usuario solicita el archivo real, el servidor de archivos genera esta cookie nuevamente y se asegura de que coincida con los usuarios.Esto significa que, incluso si el usuario falsifica la cookie, dejará de ser válida después de una hora, así que a quién le importa, y no podrá generar su propia cookie nueva porque no conoce el valor secreto.

Estaba a punto de sugerir el truco de referencia .htaccess, pero no es un método muy seguro.Es fácil crear un script PHP con una referencia http personalizada agregada.Si ingresa a la página de descarga allí, pensará que proviene de esa página.

¿Es este un problema relevante?¿Puedes decirnos algo sobre el contexto de tu página de descarga?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top