Foros del Web » Programando para Internet » PHP »

Seguridad: php que genera un archivo (vcard)

Estas en el tema de Seguridad: php que genera un archivo (vcard) en el foro de PHP en Foros del Web. Hola, como siempre, ando algo paranoico con la seguridad y...me temo que nunca colgaré nada si sigo así El tema es que he intentado montar ...
  #1 (permalink)  
Antiguo 27/10/2006, 03:47
Avatar de Covids0020  
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 20 años, 6 meses
Puntos: 1
Seguridad: php que genera un archivo (vcard)

Hola, como siempre, ando algo paranoico con la seguridad y...me temo que nunca colgaré nada si sigo así


El tema es que he intentado montar un archivo que me genere una Vcard a partir de unos datos en DB que recibo "de otro archivo" por URL y me gustaría saber qué problemas de seguridad opinais que pueda tener en relación a modificar el array pasado por URL :
Código PHP:
<?php
/* Sobra mencionar que antes he serializado el array, 
lo he codificado con base64 (eso no me gusta) y como no, 
lo codifico por url:*/

error_reporting(0);
// Vars:
if (isset($_GET['vcard']))
{
  
// Vars:
  
$vcard_url urldecode(base64_decode(stripslashes(
$_GET['vcard'])));
  
$vcard_data unserialize($vcard_url);
  
  
//print_r($vcard_data);

  
foreach ($vcard_data as $k=>$v)
  {
    ${
$k}=utf8_decode($v);
    echo 
"$v<br />";
  }
}
?>
Aclarar que no he puesto la genereación de Vcard ya que he creido no es tan importante (o sí?...), solo genera la cabezera del archivo y lo "lee".
Como digo, ando algo paranoico e intento imaginar como pueden descargar archivos "sensibles" a través de este script.
Yo entiendo que si modifico algún parametro de la URL se genera un archivo "imposible" y punto lo cual es un mal menor...
Pero intento imaginar como el tio que intentara hackear debería codificar lo que quisiera en base64, codificar por URL y pasar la variable... que es posible pero no veo peligro.
En ese sentido aún quiero encriptar de algún modo aleatorio el array que paso además de reducir el codificado porque sale larguísimo

Desde ya muchas gracias!

PD: Esto es relativo a otro problema que tengo con un gestor de descarga, codificar la URL para que sea aleatoria (se pasa una variable fija que descargará el archivo) :S
__________________
"La sabiduría comienza donde acaba el conocimiento". Yaris.
http://www.culturadigital.org
  #2 (permalink)  
Antiguo 27/10/2006, 04:21
Avatar de Covids0020  
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 20 años, 6 meses
Puntos: 1
Edit:
Umm... sorry, acabo de caer que envio una matriz asociativa, de ahí una codificación tan larga, además debería chequear que solo mi dominio llame al script con sesiones o algo...
Sigo esperando ideas vale? ... ;)
__________________
"La sabiduría comienza donde acaba el conocimiento". Yaris.
http://www.culturadigital.org
  #3 (permalink)  
Antiguo 27/10/2006, 05:14
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Bueno . .para mejorar la seguridad deberías propagar ese dato por una sesión no en el URL serializado, sino .. esos datos quedaran en historiales de navegegadores y proxys por los que pase la conexión.

No sé donde originas el dato que luego propagas el el URL (en GET .. tu "vcard" variable). Pero .. si dices que esos datos salen de una BBDD .. no sé por qué los "propagas por el URL" en tal caso .. o los propagas en una variable de sesión o bien en el script de proceso donde realmente necesitas ese "vCard" información (tal vez para componer tu e-mail a enviar) es y debería ser ahí donde obtengas los datos de tu consulta a tu BBDD.

Un saludo,

PD: Si tu problema real es sobre seguridad y paso de datos en el URL u otro médio .. no hace falta que titules tu mensaje como "vcard" pues el problema de fondo no tiene nada que ver con "vcard". Al final tu problema de "seguridad" es un concepto "común": pasar o no pasar datos por el URL. Te hago el comentario por qué mucha genete no sabrá ni que es un "vCard" ni aquí incluso queda claro (para que no sepa que es) .. pero perfectamente puede conocer PHP y como propagar dtos en forma segura de un script a otro script (si es necesario).
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #4 (permalink)  
Antiguo 27/10/2006, 07:13
Avatar de Covids0020  
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 20 años, 6 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
  #5 (permalink)  
Antiguo 27/10/2006, 07:27
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Los datos propagador por el URl son facilmente adulterables como ya conoces, tambien las validaciones del "REFERER".

Puestos a modificar código de tu aplicación externa (que por suerte tienes acceso a su código) .. ya dá igual si usas sesiones o si haces una consulta SQL en ese punto y script.

Te hago el comentario por qué como dices que usas cierto CMS .. ese sistema ya manejará su gestión de usuarios .. su control de sesiones (o en cookies? ..) en fin .. primero tendrás que estudiar como trabaja ese punto para poder acoplar tu aplicación.

Cita:
* 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
Para eso (incluido tu "ofuscación" de datos que haces usando base64 ...) .. mejor usa encriptación de datos. Sólo tendrás que conocer la "semilla" usada para la encriptación en un lado (quien genera esos datos) y en el otro lado (quien los recibe).

En esta FAQ se presenta una leve mejora a lo que ya haces con "base64" ..
http://www.forosdelweb.com/showpost....&postcount=159

Pero realmente lo que sería seguro es que "encriptes" realmente dicha "cadena" (datos a propagar el en URL):

LXXV. Funciones de Cifrado Mcrypt
http://www.php.net/manual/es/ref.mcrypt.php

Pero .. todo esto y más "natural" se resuelve con una simple -sesión- ... pues los datos NO viajan al cliente en nigún momento (donde podrian ser adulterados) sino que permanecen en el servidor .. También por el mismo método validas automáticamente que tu script de proceso de vCard sólo se llama desde una página de tu sitio y en el proceso/secuencia que corresponde.

Eso sí .. tu no estás trabajando con una aplicación "independiten" totalmente . .sino que estás haciendo un "módulo" para cierta aplicación ya pre-fabricada (CMS) .. así que primero hay que "investigar" como maneja las sesiones (si es que las usa) dicho sistema para meter tus própias variables de sesión que ahora generarías.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 27/10/2006, 08:24
Avatar de Covids0020  
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 20 años, 6 meses
Puntos: 1
Edit: jooooder... no sabía de esas funciones de cifrado reversibles :___(
Por eso usaba base64, pensé que solo había esa :___(

---

No no Clúster... creo que me expliqué mal... es decir:

Uso un CMS pero ese script es mio, no una aplicación externa, no te entendí bien con lo de tener suerte oO.

Es decir, puedo generar vCards donde quiera con ese scripts y de hecho, el script que gestiona "direcciones", que es de donde saco las vcards, también es mio... vamos que el CMS tiene poco que ver en todo el proceso, por no decir NADA... es de lo mejor de Wordpress :)
En esta situación... básicamente podríamos decir que solo genera una cabecera, un menú y un pie HTML xD

El hecho... es que sé que lo suyo es usar sesiones y tal, además lo tengo realmente fácil si hago una simple consulta desde un id de dirección a mi DB pero bueno, ya sabeís como es esto:
Más o menos siempre estoy probando soluciones alternativas a: sesiones, acceso a bases de datos, JavaScript, etc... unas veces porque creo (seguro que me equivoco) que ahorro recursos: otra consulta más a la db, un require con la config de la conexión o lo que sea...
y otras porque el cliente del usuario no disponga de esas opciones: JavaScript, cookies, sesiones... así a veces intento algo... digamos más básico a ver si "se podría".

---

Así, lo que pretendía es, basicamente, saber la forma en que se podría descargar un archivo "sensible" con ese método, así a grosso modo.
O saber como de peligroso puede ser php, si con una simple modificación de la URI podrían incluso acceder a la DB (incluso sin consultarla el script)... no sé.


---
Ya tenía pensado usar una encriptación mejor solo que aún iba probando esos métodos pero tampoco... solo quería "ofuscar un poco" y ya me lié xD


En fin, muchas gracias de todas formas, probaré las sesiones aunque no sea lo que yo quería :(
__________________
"La sabiduría comienza donde acaba el conocimiento". Yaris.
http://www.culturadigital.org

Última edición por Covids0020; 27/10/2006 a las 09:24
  #7 (permalink)  
Antiguo 27/10/2006, 09:35
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Está muy bien que tengas la inquietud por "intentar innovar" ..pero a veces todo es ta hece no ver la realidad o los standares, .. te vas por soluciones enrredadas y en ocasiones "inseguras" (como el uso de base64 que hacías por desconocimiento).

Yo te recomendaría siempre ver la solución clásica o standar y luego evaluar que tango la mejorarías con tus alternativas.

Temas de "rendimiento" que te cuestionas ahora .. realmente si no conoces en profundidad de esos temas no sé como te puedes plantear que lo tuyo será mejor. No sé si me explico .. si yo no sé bien como funcionan las sesionse a nivel "lógico" y "físico" no puede decir por ejemplo que el "cliente" no acepte sesiones ... por qué no sería correcto (como es el caso)....)

Cita:
Así, lo que pretendía es, basicamente, saber la forma en que se podría descargar un archivo "sensible" con ese método, así a grosso modo.
O saber como de peligroso puede ser php, si con una simple modificación de la URI podrían incluso acceder a la DB (incluso sin consultarla el script)... no sé.
La primera regla de seguridad es: NO Confiar en datos externos que llegan a un script. Esto no es sólo válido en "PHP" sino en cualquier lenguaje cliente-servidor (como es PHP y otros tantos: ASP, Perl .. etc).

Es decir, .. tu siempre tienes que validar tus datos, saber que es lo que puedes recibir (por tipo de dato .. etc). No puedes "inyectar" datos directos a una BBDD sin alguna validación anterior y si no lo haces es cuando llegan los problemas de seguridad.

Te recomiendo este artículo sobre seguridad en general aplicada a PHP .. cosas que debes hacer y que no debes hacer:
http://phpsec.org/projects/guide/
(está en las FAQ's del foro PHP por si a caso ..)

Cita:
En fin, muchas gracias de todas formas, probaré las sesiones aunque no sea lo que yo quería :(
Insisto .. Si conocieses más las "sesiones" verías mejor sus veneficios . tal vez ese "desconocimiento en profundidad" de ese tema es lo que te crea rechazo .. Documentate, pregunta y saca tus conclusiones.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 27/10/2006, 10:09
Avatar de Covids0020  
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 20 años, 6 meses
Puntos: 1
Kwennnnn, sabíaaaaaaaaa que dirías esto :
Cita:
el "cliente" no acepte sesiones
, no he dicho exactamente eso aunque sé que de algún modo estaba mal escrito:
Las sesiones son variables del entorno del servidor no?... aunque no sepa exactamente como van creo que sé que "solo" las maneja el server... y que no tiene nada que ver con el navegador (cliente) o el dispositivo o software que sea, que también creo que sé que es más o menos.

Yo me refería a que el cliente no acepte cookies... y ya no sé pero me suena algo de que se pueden gestionar las sesiones pero eso da igual...

Y sobre el rendimiento me refería a hacer una consulta más a la DB... en efecto tampoco sé cuanto me va a consumir eso o sí siquiera será significante.

Es obvio que no quiero reinventar la rueda ni decirle a nadie que sé hacerlo mejor... solo disfruto experimentando mientras intento aprender algo, de ninguna manera pretendo, sobretodo conociendo MIS LIMITACIONES, demostrar nada ni enseñar nada... yo solo vengo aquí y pregunto lo que no sé mientras de paso intento ayudar en lo que puedo.

Entiendo que mucha gente se sienta u ofendida o atacada por el intrusismo profesional de este tipo de foros, pero como precedente quiero comentar que no será mi caso nunca intentar enseñar a ningún profesional Clúster... y lo siento si se me entiende de otra manera o doy esa impresión.

Tapronto y de nuevo mil gracias.
__________________
"La sabiduría comienza donde acaba el conocimiento". Yaris.
http://www.culturadigital.org
  #9 (permalink)  
Antiguo 27/10/2006, 10:24
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Las sesiones son variables del entorno del servidor no?... aunque no sepa exactamente como van creo que sé que "solo" las maneja el server... y que no tiene nada que ver con el navegador (cliente) o el dispositivo o software que sea, que también creo que sé que es más o menos.
En realidad si que afectan las sesinoes al "cliente" .. por qué ahí tienes el termino del "SID" (Identificador Único de Sesión) .. el cual debe viajar entre cliente-servidro para hacer la "asociación" de los datos que están en el servidor vs el cliente que le pertenece. Dicho dato lo puedes propagar en el URL o en cookies .. Así que si decides usar cookies para propagar el SID, ahí te afecta directametne la configuración del "cliente" (navegador en estos casos).

Cita:
Es obvio que no quiero reinventar la rueda ni decirle a nadie que sé hacerlo mejor... solo disfruto experimentando mientras intento aprender algo, de ninguna manera pretendo, sobretodo conociendo MIS LIMITACIONES, demostrar nada ni enseñar nada... yo solo vengo aquí y pregunto lo que no sé mientras de paso intento ayudar en lo que puedo.
Eso es entendible .. yo lo hago también (cuando puedo) ... Mis comentarios sólo van encaminados a lo que observo. Muchas veces uno se dedica a "rodear" el problema en lugar de atacarlo directamente. Es decir .. en estos casos si se investiga más sobre lo que sería lo "standar" en un principio .. con mayores argumentos podrías intentar otro tipo de soluciones. Cada uno hace lo que quiere según sus propósitos, el tema queda ahí y quien quiera lo toma y saca sus conclusiones, no se trata de "imponer" a nadie que lo tuyo o lo mio sea "mejor" simplemente .. como personas civilizadas que somos .. cada uno tendrá sus puntos de vista al respecto y argumentos que dar para defender sus ideas, nada más.

Sólo es un comentario .. no te lo tomes a mal.

Cita:
Entiendo que mucha gente se sienta u ofendida o atacada por el intrusismo profesional de este tipo de foros, pero como precedente quiero comentar que no será mi caso nunca intentar enseñar a ningún profesional Clúster... y lo siento si se me entiende de otra manera o doy esa impresión.
Tranquilo en ese aspecto .. yo mismo no soy "profesional" como corresponde .. es decir, yo no soy "Ingeniero en Informática" ni tengo título profesional sobre estos temas. (Pero ahora soy un "intruso" por qué trabajo y vivo profesionalmente de esto .. al nivel que tengo ni mas ni menos).

Por lo demás en un "foro" el que acude a el .. es con fines de enseñar o aprender en general. Aunque la mayor parte de mensajes que entran a -este- foro son más bien para resolver un problema puntual y no tanto en "aprender". Mi folosofía es siempre la de intentar "enseñar" o mejor dicho "transmitir" lo que yo sé. Si al otro lado tengo alguien que domina mejor el tema .. yo aprendo y si no es así .. intento que aprenda.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #10 (permalink)  
Antiguo 27/10/2006, 10:41
Avatar de Covids0020  
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 20 años, 6 meses
Puntos: 1
Pos nada, según lo comentado no es plan hacer esto algo personal gg, personalmente... para mí es un alivio cuando veo en los mensajes el nombre de Clúster, así que me sigo alegrando de tener tu ayuda por aquí... y en este sentido y escuchando tus consejos... así he acabado:

Código PHP:
if ( (isset($_GET['vcard'])) and (count($_GET)==1) and (eregi("[0-9]",$_GET['vcard'])) )
{
  
$ID_dir $_GET['vcard'];
  
$myvcard mysql_fetch_assoc(mysql_query("SELECT * FROM wp_directorio WHERE dir_id = '$ID_dir'"));
  
  
extract($myvcard);
  
header('Content-Type: text/x-vcard');
  
header('Content-Disposition: attachment; filename='.$nom.'.vcf');
  echo
"BEGIN:VCARD\nVERSION:2.1\nN:".$nom."\nADR:".$dir."\nTEL;VOICE:".$tel."\nTEL;FAX:".$fax."\nEMAIL:".$correo."\nEND:VCARD\n";

Juas juas --- Edit: ya le meteré algo: sesión o algo para las llamadas externas pero por ahora... ups... supongo que podrían saturar la DB no?.... argggggg!

Aunque he de reconocer que me tentaba muuuuuchooo seguir por el otro camino hasta ver donde podría llegar con las encriptaciones :P

...que yo sabía que acabaría así xDD
PD: Sigo sin tener mucha idea de seguridad y si ese script seguiría siendo vulnerable por URL... :_(
Es decir... como decías, yo chequeo siempre las entradas de usuario (lo aprendí aquí :D ) pero no sé hasta que punto lo hago bien

Por ejemplo... he creido que con solo aceptar números sobraría hacer nada más (no recuerdo que se usaba para and estricto: || o && )
__________________
"La sabiduría comienza donde acaba el conocimiento". Yaris.
http://www.culturadigital.org
  #11 (permalink)  
Antiguo 27/10/2006, 10:55
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Según el código que expones .. pese que validas el método (GET) y el tipo (con tus expresiones regulares) de dato (numerico en tu caso) ... si yo ingreso un valor de un "vcard" (variable en $_GET) que no exista en tu BBDD .. según el código que propones .. "reventará" dicha ejecución con un bonito mensaje de error que (lo más probable, depende de configuración de reporte de errores que uses) me desvele información sobre rutas y nombres de tus scripts.

En resumen, .. debes "ver" cuantos registros te arroja tu consulta SQL antes de pretender acceder a su resultado.

Si tu "anidas" tanto las funciones que usas (sobre todo de acceso a BBDD) tipo:
Código PHP:
$myvcard mysql_fetch_assoc(mysql_query("SELECT * FROM wp_directorio WHERE dir_id = '$ID_dir'")); 
Así no puedes controlar estos "eventos" que te comento. Debes hacer validaciones tipo:

Código PHP:
$resultado=mysql_query("SELECT * FROM wp_directorio WHERE dir_id = '$ID_dir'") or die ("Error en la consulta");

if (
mysql_num_rows($resultado) == 1){
   
$myvcard mysql_fetch_assoc($resultado);
   
// etc tu código ...
} else {
  die (
"No existe el ID seleccionado .. no metas manoo al URL");

No está de más que "ocultes" (sólo cuando tengas en "producción" este código) los posibles mensajes de error que PHP dará si fallan las funciones de conexión o ejecución de consultas. Esto lo puedes manejar a nivel general en el script con: error_reporting() .. o bien en forma particular para alguna función de PHP con un @ delante (eso ocultará sus posibles mensajes de error que dé PHP y lo gestionas con el tuyo personalizado).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #12 (permalink)  
Antiguo 27/10/2006, 11:08
Avatar de Covids0020  
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 20 años, 6 meses
Puntos: 1
Ahhhh.... cluster... me dan ganas de llorar

Gggg xD a ver... esto es rápido, como ejemplo, yo suelo usar por ejemplo:
$query = "aqui la consulta DB";
$req = mysql_query() or die(); //ups
$row = mysql_fetch_assoc(); ...y así todo.
ggggg
Y luego gestionar los errores (en este caso son páginas no encontradas) pero es que ya ves, lo pongo rápidito porque mi interés eran las GETS y la seguridad... solo eso ;) ...tampoco es pa tanto este script :S

Si hago una gestión de errores muy amena y bonita tio con sus CSS y todo.
Comentar para finalizar que he decido usar cookies, una que se crea al entrar al sitio y la destruyo en cuanto descarga... aunque también intento aprender más sobre como van porque habrá gente que sabrá como seguir usando esas cookies.... pfff que follón! :D

Graaaaaciassssssss juas.
__________________
"La sabiduría comienza donde acaba el conocimiento". Yaris.
http://www.culturadigital.org
  #13 (permalink)  
Antiguo 27/10/2006, 11:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por Covids0020 Ver Mensaje
Ahhhh.... cluster... me dan ganas de llorar

Gggg xD a ver... esto es rápido, como ejemplo, yo suelo usar por ejemplo:
$query = "aqui la consulta DB";
$req = mysql_query();
$row = mysql_fetch_assoc(); ...y así todo.
ggggg
Y luego gestionar los errores (en este caso son páginas no encontradas) pero es que ya ves, lo pongo rápidito porque mi interés eran las GETS y la seguridad... solo eso ;) ...tampoco es pa tanto este script :S

Si hago una gestión de errores muy amena y bonita tio con sus CSS y todo.
Comentar para finalizar que he decido usar cookies, una que se crea al entrar al sitio y la destruyo en cuanto descarga... aunque también intento aprender más sobre como van porque habrá gente que sabrá como seguir usando esas cookies.... pfff que follón! :D

Graaaaaciassssssss juas.
Especificamente lo que hacía referencia es al uso de "contar los registros que una consulta SQL ejecutada me puede arrojar": msyql_num_rows() ..

No sé si eso ya lo usas como te propongo .. viendo el n° de registro que espero: 1 o mayor que 1 ... Pero, como "hablabamos" de seguridad en general .. ahí observé un problema.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #14 (permalink)  
Antiguo 27/10/2006, 11:19
Avatar de Covids0020  
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 20 años, 6 meses
Puntos: 1
Por ejemplo:
Código PHP:
    if($myvcard>0)
    {
      
extract($myvcard);
      
header('Content-Type: text/x-vcard');
      
header('Content-Disposition: attachment; filename='.$nom.'.vcf');
      echo
"BEGIN:VCARD\nVERSION:2.1\nN:".$nom."\nADR:".$dir."\nTEL;VOICE:".$tel."\nTEL;FAX:".$fax."\nEMAIL:".$correo."\nEND:VCARD\n";
      
setcookie('descarga','0',time()-3600); //Esto no me funca :_(
    
}
    else
    {
      
// Error 404 - Nombre Incorrecto
      
header 'HTTP/1.0 404 Not Found' );
      echo 
'<h1>ERROR INTERNO</h1>
      <p>Ha habido un problema con el Archivo Solicitado, por favor, disculpa y prueba a intentarlo m&aacute;s tarde.</p>'
;      
    } 
Ahora tengo que ver como no permitir entradas externas... sinceramente...:
Antes chequeaba el número de registros encontrados pero desde que me vendí a los CMS y perdí práctica simplemente suelo usar el die() con mysql_query, en el mysql_fetch_assoc reconozco que se me pasa chequearlo :__(
juer... se acostumbra uno a tenerlo todo hecho :(
__________________
"La sabiduría comienza donde acaba el conocimiento". Yaris.
http://www.culturadigital.org
  #15 (permalink)  
Antiguo 27/10/2006, 11:22
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por Covids0020 Ver Mensaje
Por ejemplo:
Código PHP:
    if($myvcard>0)
    {
      
extract($myvcard);
      
header('Content-Type: text/x-vcard');
      
header('Content-Disposition: attachment; filename='.$nom.'.vcf');
      echo
"BEGIN:VCARD\nVERSION:2.1\nN:".$nom."\nADR:".$dir."\nTEL;VOICE:".$tel."\nTEL;FAX:".$fax."\nEMAIL:".$correo."\nEND:VCARD\n";
      
setcookie('descarga','0',time()-3600); //Esto no me funca :_(
    
}
    else
    {
      
// Error 404 - Nombre Incorrecto
      
header 'HTTP/1.0 404 Not Found' );
      echo 
'<h1>ERROR INTERNO</h1>
      <p>Ha habido un problema con el Archivo Solicitado, por favor, disculpa y prueba a intentarlo m&aacute;s tarde.</p>'
;      
    } 
Ahora tengo que ver como no permitir entradas externas... sinceramente...:
Antes chequeaba el número de registros encontrados pero desde que me vendí a los CMS y perdí práctica simplemente suelo usar el die() con mysql_query, en el mysql_fetch_assoc reconozco que se me pasa chequearlo :__(
juer... se acostumbra uno a tenerlo todo hecho :(
El código que propones .. la cookie no se declara por qué antes envias cabeceeras HTTP .. la definición de la cookie (setcookie()) iría antes de tus header() ... (Esto es un poco de teoría del protocolo HTTP más bien .. el "orden" de esas cabeceras ..mucho más no sé .. pero por ahí va el cuento).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #16 (permalink)  
Antiguo 27/10/2006, 12:31
Avatar de Covids0020  
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 20 años, 6 meses
Puntos: 1
Arreglado todo...las prisas no son buenas.
Me he puesto a leer un poco de cookies y sesiones, he mirado como actuaba mi CMS y, como era de esperar, te he hecho caso... tantas vueltas para acabar como dijiste al principio:

Acceso a datos (filtrando la variable por URL) mediante DB y el uso de sesión... :)
Luego pongo el código por eso de que pudiera servirle a alguién aunque lo dude muchísimo, solo la destrucción de sesión:
Código PHP:
     if($myvcard>0)
    {
      
extract($myvcard);
      
header('Content-Type: text/x-vcard');
      
header('Content-Disposition: attachment; filename='.$nom.'.vcf');
      echo
"BEGIN:VCARD\nVERSION:2.1\nN:".$nom."\nADR:".$dir."\nTEL;VOICE:".$tel."\nTEL;FAX:".$fax."\nEMAIL:".$correo."\nEND:VCARD\n";
      unset(
$_SESSION['ses_vcard']);
      
session_destroy();
    } 
Por enésima vez y finalizando esto: Gracias Clúster.
__________________
"La sabiduría comienza donde acaba el conocimiento". Yaris.
http://www.culturadigital.org
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:18.