Ver Mensaje Individual
  #4 (permalink)  
Antiguo 27/10/2006, 07:13
Avatar de Covids0020
Covids0020
 
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 20 años, 7 meses
Puntos: 1
Muchas gracias Cluster, eso lo primero, esperaba tu respuesta
Entiendo sobre el título, lo cierto es que dudé: temía que fuese demasiado genérico y me ha salido al revés ggg xDD
Uno nunca acierta con los títulos :___(

Al lio:

Veras... no quería hacer una consulta desde el script que genera la Vcard, no me fio, no quiero acceder a la DB desde ahí, entre otras cosas porque es un archivo externo al Sistema CMS que uso.

* Datos por URL:
Por eso decidí pasar los datos por URL, para que en todo caso, solo se generara un problema de... pos eso, un archivo dañado de vcard, un archivo inexistente, etc... mi temor solo se basa en si pudieran acceder a otros archivos del server (que lo dudo pero weno).

// Chequeos para que no sea accesible desde fuera, o lo usen para generar sus propias VCard:

* Referer:
Segundo... para proteger el script añadí un chequeo del referer que supongo se puede saltar alguién aunque yo no sé como.


* Código de control:
Tercero... para acabar de protegerlo, añado a la codificación un código de control en el URL, que no es aleatorio (ya veré como consigo hacerlo aleatorio y sacarla igual en el destino) y que genero con datos del server: Variables del servidor.

---

Pongo el script aunque se me ha ocurrido otra cosa para el Código de control: Generarlo también con los caracteres de la Vcard :_(

Bueno, va:
Aquí genero la URL con los datos para Vcard:
Código PHP:
  // Codigo de Seguridad:
  
$codesec md5($_SERVER['NAME'].$_SERVER['SERVER_SOFTWARE']
.
$_SERVER['SERVER_ADDR'].$_SERVER['SERVER_ADMIN']);

  
$vcard_values=$nom."-".$dir."-".$tel."-".$fax."-"
.$mail."-".$codesec;
  
$vcard_link=urlencode(base64_encode($vcard_values)); 
Sé que es muy cutre... que hay formas más "elegantes" de gestionar los elementos de la matriz, etc, etc... pero es rápido para ver el problema.
Luego espero sobretodo APRENDER y refinarlo ;)

Luego no habrá dies() claro, mejor desorientar ;)

Código PHP:
<?php
error_reporting
(0);

if ( isset(
$_GET['vcard']) and (count($_GET)==1))
{
  if( 
$_SERVER['HTTP_REFERER'] ==
 
"http://".$_SERVER['HTTP_HOST']."/script_de_proceso/")
  {
    
// Decodificado de la URL:
    
$vcard_url urldecode(base64_decode($_GET['vcard']));
    
// Codigo de Control:
    
$arr_code explode("-",$vcard_url);
    
$code_card array_pop($arr_code);
    
    if( 
$code_card ==
md5($_SERVER['NAME'].$_SERVER['SERVER_SOFTWARE']
.
$_SERVER['SERVER_ADDR'].$_SERVER['SERVER_ADMIN']) )
    {
    
    
// Matriz de Elementos de la VCARD (Quitamos el codigo de control)
    
$vcard_data explode("-",$vcard_url,-1);
    
      foreach (
$vcard_data as $k=>$v)
      {
        
//${$k}=utf8_decode($v);
        
echo utf8_decode($v)."<br />";
      }
    }
    else
    {
      die(
"Wrong Code Control");
    }
  }
  else
  {
    die(
"Wrong Referer");
  }
}
else
{
  die(
"Wrong parameter");
}
?>
El cuerpo del archivo final quedaría algo así y los die() serían headers de Archivo no encontrado, error de servidor, URl demasiado larga y cosillas así :S :
Código PHP:
   header('Content-Type: text/x-vcard');
  
header ('Content-Disposition: attachment; filename='.$nom.'.vcf');
  echo 
"BEGIN:VCARD\nVERSION:2.1\nN:".$nom."\n
ADR:"
.$dir."\n
TEL;VOICE:"
.$tel."\nTEL;FAX:".$fax."\nEMAIL:".$correo."\n
END:VCARD\n"

PD: Cluster... he intentado las sesiones pero... jummm, no me ha salido muy bien del todo.
Quiero aclarar que no es un sistema modular propio, o sea, no sabría como propagar la sesión a ese script externo... aún :)



Muchísimas gracias desde ya!.
__________________
"La sabiduría comienza donde acaba el conocimiento". Yaris.
http://www.culturadigital.org

Última edición por Covids0020; 27/10/2006 a las 07:22