FECHA |
VERSION |
DESCRIPCION |
AUTOR |
Nov 15 de 2007 |
1.0 |
Procedimiento técnico para el acceso a los repositorios de imágenes de ORFEO de forma segura |
Donaldo Jinete. |
Este manual describe el procedimiento para usar la clase SecureImage, que se encuentra definida en el archivo SecureImage.class.php, dentro del directorio clases/ dentro de la raíz de ORFEO, la documentación de esta clase generada con PhpDocumentor se encuentra dentro del directorio doc/ en este mismo directorio.
La forma de acceso a las imágenes depende únicamente de que los desarrolladores de ORFEO usen la clase para dar acceso a archivos de forma segura, desde el punto de vista del usuario de sistema de gestión documental esto es totalmente indiferente, salvo que no se tendrá acceso a los archivos con vínculos a nombres reales sino a un nombre generado con MD5 que es un vinculo a archivo real
Ilustración
1: Diagrama de la clase SecureImage
La bodega de imágenes debe estar montada
El usuario que ejecuta el servicio web (normalmente nobody ), debe tener permisos de escritura sobre la bodega de las imágenes y debe estar fuera del directorio Documment Root de apache
El usuario que ejecuta el servicio web debe tener permisos de escritura sobre el directorio en donde se crearán los vínculos a las imágenes de la bodega
Se debe configurar Apache para que siga los vínculos simbólicos que encuentre en las rutas de los archivos
esto se realiza cambiando la configuración del directorio dentro de las bodegas dentro de apache en el archivo apache2.conf
como se muestra a continuación:
<Directory /var/www/orfeo3.6/bodega>
AllowOverride FileInfo AuthConfig Limit
Options MultiViews Indexes FollowSymLinks IncludesNoExec
</Directory>
Comúnmente la bodega de Orfeo se viene manejando mediante un vinculo dentro de la ruta /var/www/orfeo3.6/bodega hacia el directorio /mnt/bodegas/desarrollo/bodega/ esté vínculo debe eliminarse y en su lugar crearse en directorio bodega dentro de esta misma ruta, esto con el propósito de eliminar del Documment Root de Apache la bodega de imágenes
1. INCLUSIÓN El desarrollador de ORFEO, desea tener acceso de forma segura a las imágenes de la bodega
Debe incluir el archivo SecureImage.class.php dentro del código de su archivo
require_once “$ruta_raiz./clases/SecureImage.class.php”;
2. CREACIÓN: Una vez incluido el archivo SecureImage.class.php en donde se define la clase SecureImage, se puede crear una instancia de ella
try {
$segure = new SecureImage($realFile, $linkDir);
}
catch (Exception $e) {
die("Caught exception: ".$e->getMessage());
}
Es
mejor crear la instancia la clase mediante un bloque try – catch,
ya que si no se puede crear el objeto, se genera una excepción,
que se debería controlar dentro del código de la
aplicación. La documentación de la clase explica los
parámetros del constructor, pero recibe como primer argumento
la ruta del archivo real es decir la ruta absoluta comenzando en /
hasta la extensión del archivo que contiene la imagen que se
quiere acceder, aunque se aceptan también rutas relativas,
se debe tener en cuenta el directorio actual cuando se usen este
tipo de rutas , y el segundo argumento es el directorio en donde se
quieren crear los vínculos a las imágenes este
argumento es opcional y sí no se especifica se asume el
directorio actual '.' ( punto ).
3.
OBTENCIÓN
DEL VÍNCULO:
El
método SecureImage::LinkPath()
no toma argumentos y retorna un STRING con la ruta al vínculo
que se creo basado en un hash MD5 a partir del nombre del archivo y
el día del mes. Este vínculo se puede usar para
acceder el archivo real sin el peligro tener el directorio de la
bodega de las imágenes publicada en un directorio visible
desde la web.
4.
ELIMINACIÓN DEL VINCULO
Una
vez creado el vínculo para tener acceso a las imágenes
del repositorio y usado se puede eliminar mediante el método
SecureImage::unsetLink()con
el fin de no llenar el directorio de vínculos anteriores sin
usarse.
5. CÓDIGO DE EJEMPLO
A
continuación se muestra un ejemplo completo del uso de la
clase SecureImage, para el acceso a archivos
<?php
/**
*Archivo de ejemplo de uso de la clase para el acceso seguro a los archivos del repositorio de imagenes de ORFEO
*
* PHP versions 4 and 5
*
* LICENSE: This source file is subject to version 3.0 of the PHP license
* that is available through the world-wide-web at the following URI:
* http://www.php.net/license/3_0.txt. If you did not receive a copy of
* the PHP License and are unable to obtain it through the web, please
* send a note to license@php.net so we can mail you a copy immediately.
*
*
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @author Donaldo Jinete Forero <djinete@superservicios.gov.co>
* @since 10 de Noviembre de 2007
* @package seguridad
* @category imagenes
*/
include_once '../include/SecureImage.class.php';
$realFile = "/home/manu/prueba.txt.txt";
$linkDir = "tmp";
try {
$segure = new SecureImage($realFile, $linkDir);
}
catch (Exception $e) {
die("Caught exception: ".$e->getMessage());
}
print("<br><b>extension:</b> ".$segure->getExten()."<br>");
print("<br><b>link name:</b> ".$segure->getlinkFileName()."<br>");
print("<br><b>path:</b> ".$segure->getLinkPath()."<br>");
print("<br><b>Lista de Atributos</b><br>");
foreach($segure->getLinkInfo() as $key=>$value) {
print("$key = $value <br>");
}
print("<br><a href=\"$realFile\">Archivo Real</a>");
print("<br><a href=\"".$segure->getLinkPath()."\">Vinculo Creado</a>");
//$segure->unsetLink();
?>
6. SALIDA
DE LA EJECUCIÓN
extension: txt
link name:
15483ef50323675b170edc4068880011.txt
path:
tmp/15483ef50323675b170edc4068880011.txt
Lista de
Atributos
0 = 770
1 = 950161
2 = 41471
3 = 1
4
= 33
5 = 33
6 = -1
7 = 25
8 = 1196110865
9 =
1196110865
10 = 1196110865
11 = -1
12 = -1
dev = 770
ino = 950161
mode = 41471
nlink = 1
uid = 33
gid
= 33
rdev = -1
size = 25
atime = 1196110865
mtime =
1196110865
ctime = 1196110865
blksize = -1
blocks = -1
Archivo
Real
Vinculo
Creado