Volver al indice

CU-ORFEO-63 – Seguridad en Imágenes de ORFEO

Historia de revisión

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.



1. Descripción

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.

2. Actores

2.1 Desarrollador de ORFEO

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

3. Diagrama de uso de la clase















4. Diagrama de clase




Ilustración 1: Diagrama de la clase SecureImage






3.1. Flujo Básico ó Normal : Realizar acceso a las imágenes

3.1.1 Precondiciones

        1. La bodega de imágenes debe estar montada

        2. 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

        3. 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

        4. 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>

        5. 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

Volver al indice