Skip to content

Instantly share code, notes, and snippets.

@parzibyte
Created Feb 5, 2019
Embed
What would you like to do?
<?php
/**
* Forzar la descarga de un archivo con
* PHP a partir del parámetro GET. Ejemplo 2
*
* @author parzibyte
*/
/*
-------------------------------------
- Grandiosa nota sobre la seguridad -
-------------------------------------
Este script es ilustrativo, puedes usarlo
en producción pero asegúrate de limitar
los archivos que se pueden leer. Por ejemplo,
haz un arreglo de los permitidos y luego usa
in_array, o comprueba antes qué fichero vas
a servir
Este script puede servir literalmente cualquier archivo
a través del dato que haya en $_GET["a"]. Si quieres puedes
quitar eso y tomar el nombre desde otro lugar (p. ej. la sesión
o una base de datos en la que confíes)
Un atacante podría ver todos los archivos, incluyendo el index.php
u otros que estén arriba o abajo (usando ../ o /) y podría llegar
incluso a la raíz del sistema
En resumen, lee los archivos a partir de un nombre en el que confíes
*/
if (empty($_GET["a"])) {
exit("No proporcionaste ningún nombre de archivo");
}
$archivo = $_GET["a"];
if (!file_exists($archivo)) {
exit("Archivo no existente");
}
$nombre = basename($archivo);
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=$nombre");
readfile($nombre);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment