Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Archivos en PHP
(bsico)
Cuestiones de Seguridad
Siempre que hablemos de permitir al usuario cargar archivos a nuestro
servidor, tenemos la obligacin de comprender qu dicha carga de archivos
puede poner en riesgo la estabilidad del servidor. Esto es debido a que la
carga de archivos no ser posible realizarse, si el directorio en el cul se
pretende efectuar la carga no posee permisos de escritura.
Por tal motivo, siempre es aconsejable, que los directorios que cuenten
con permisos de escritura no se encuentren servidos, es decir, que no
se pueda acceder a ellos, mediante el navegador Web (no deben tener acceso
por medio de una URL).
Otra cuestin fundamental, es que al permitir la carga de archivos al servidor,
deben extremarse al mximo posible, las validaciones sobre el tipo de
archivo que se est subiendo. Esta validacin, siempre deber hacerse,
validando que el type del array $_FILES sea un tipo permitido. Toda
validacin realizada del lado del cliente (con JavaScript, por ejemplo) o sobre la
extensin del archivo, jams ser del todo segura.
NOTA #1:
El nombre de archivos relacionados a registros en una base de datos, llevarn
como nombre la ID del registro.
Si son varios archivos, se crea una carpeta cuyo nombre sea la ID del registro y
dentro los archivos con cualquier nombre.
Si son varios archivos de distinto tipo (fotos, documentos, videos, etc.) puede
crearse una carpeta cuyo nombre sea la ID y dentro de esta, un directorio para
cada tipo (fotos, documentos, videos, etc.).
NOTA #2:
Para aplicar esta validacin, el php.ini debe estar configurado de la siguiente
manera:
opcin 1 (por defecto):
open_base_dir y upload_tmp_dir vacos
ruta
-no
servida-
dentro
de
la
definida
Cuando los archivos que se cargan son binarios que deben ser mostrados
estticamente desde cdigo HTML -o descargados-, es necesario que el
navegador tenga acceso a ellos.
en
Mostrar imgenes
contenidas en un archivo
ZIP no accesible desde el
navegador
Este hack implementa el truco anterior para permitir mostrar en HTML,
archivos de imgenes que se encuentran dentro de un ZIP.
// archivo: image_show.php
$archivo_zip = "imagenes.zip";
if(isset($_GET['filename'])) {
$imagen = "zip://$archivo_zip#{$_GET['f']}";
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $imagen);
finfo_close($finfo);
header("Content-Type: $mime");
readfile($imagen);
} else {
$zipobj = new ZipArchive;
$recurso = $zipobj->open($archivo_zip);
$i = 0;
while($nombre = $zipobj->getNameIndex($i)) {
print "<img src='image_show.php?f=$nombre'><br>" . chr(10);
$i++;
}
$zipobj->close();
}
LINKS OFICIALES:
Carga de archivos (especificaciones generales):
http://php.net/manual/es/features.file-upload.post-method.php