Ok, por lo que tenemos los siguientes requisitos en lo que va
- Deje que el usuario descarga en su/su sesión sólo
- ninguna copia & pegar el enlace a otra persona
- Los usuarios tienen para descargar desde el sitio, por ejemplo sin control de velocidad
- hotlinking
Vamos a ver.Esto se no código funciona, pero debería funcionar a lo largo de estas líneas:
<?php // download.php
session_start(); // start or resume a session
// always sanitize user input
$fileId = filter_input(INPUT_GET, 'fileId', FILTER_SANITIZE_NUMBER_INT);
$token = filter_input(INPUT_GET, 'token', FILTER_UNSAFE_RAW);
$referer = filter_input(INPUT_SERVER, 'HTTP_REFERER', FILTER_SANITIZE_URL);
$script = filter_input(INPUT_SERVER, 'SCRIPT_NAME', FILTER_SANITIZE_URL);
// mush session_id and fileId into an access token
$secret = 'i can haz salt?';
$expectedToken = md5($secret . session_id() . $fileId);
// check if request came from download.php and has the valid access token
if(($expectedToken === $token) && ($referer === $script)) {
$file = realpath('path/to/files/' . $fileId . '.zip');
if(is_readable($file)) {
session_destroy(); // optional
header(/* stuff */);
fpassthru($file);
exit;
}
}
// if no file was sent, send the page with the download link.
?>
<html ...
<?php printf('a href="/download.php?fileId=%s&token=%s',
$fileId, $expectedToken); ?>
...
</html>
Y eso es todo. No se requiere base de datos. Esto debería cubrir los requisitos 1-3. No puede controlar la velocidad con PHP, pero si no destruye la sesión después de enviar un archivo, puede escribir un contador en la sesión y limitar el número de archivos que se le enviará al usuario durante una sesión.
Estoy completamente de acuerdo en que esto podría resolverse de forma mucho más elegante que con este hack de monkeyform, pero como prueba de concepto, debería ser suficiente.
¿Cuánto tiempo se debe guardar el archivo? – Ikke
¿Podrías por favor ser más específico sobre lo que estás tratando de lograr? Anti-Leeching DL Script es un poco vago. ¿Cuál es la UseCase o problema que el script está tratando de resolver? – Gordon
Hola lkke, Solo quiero permitir que el usuario descargue en su sesión solo, como que no puede simplemente copiar y pegar el enlace a otra persona Hola Gordon, Quiero forzar a los usuarios a descargar archivos de mi sitio, controla la velocidad. Entonces, creo que para crear un archivo temporal en un directorio temporal en documentos HTTP para que el usuario pueda descargarlos y luego eliminarlos (automáticamente) después de que la sesión caduque – mrblue