Entradas

Mostrando entradas de septiembre, 2008

Encriptar sesiones utilizando mcrypt en php

Bueno por todos es conocido que las sesiones en php tienes sus vulnerabilidades, vaya que no son 100% efectivas en cuanto a seguridad, pues estas se almacenan en unas cookies en el servidor en cuyo caso si se tiene acceso a esta carpeta se podrían leer. Para evitarlo hay diversas maneras una es almacenando los datos de sesión en un servidor de bases de datos o codificando estas cookies.
La desventaja del primero aunque es más seguro es la saturación del servidor SQL en caso de que existan muchas variables y muchos usuarios, por eso me parece una forma segura y fiable la codificación de estas cookies.
Este código es una modificación del código de Martin Sarsale (martin@n3rds.com.ar) en el cual utiliza funciones ya deprecadas en php. Además le aumento la seguridad utilizando constantes definidas en otros archivos y el vector de inicialización.

define("INIT_VECTOR","36452318");

function sess_open($sess_path, $session_name){
global $_SEC_SESSION;
$sess_sec=ini_get('ses…

Encriptar con php usando mcrypt

Primero que nada de debemos instalar esta libreria en php, yo utilizo WAMP donde con un solo click lo podemos hacer pero en caso de que sea manualmente debemos ir al php ini y cambiar lo siguiente:
;extension=php_mcrypt.dll
;extension=php_mcrypt_filter.dll
a
extension=php_mcrypt.dll
extension=php_mcrypt_filter.dll
Importante Asegurarnos que en la ruta de extensions_dir esté el directorio donde están estas dos librerias.
Anteriormente se utilizaban las funciones mcrypt_ecb, etc. Pero estas están en desuso y suelen dar errores del tipo:


Warning: mcrypt_ecb(): Attempt to use an empty IV, which is NOT recommend in (url)
PHP Warning: mcrypt_ecb(): Size of key is too large for this algorithm in


El primero indica que no hemos puesto el valor del vector de inicialización pero este valor no está pasado a la función. En el manual de php los parámetros de la función son los siguientes:
String mcrypt_ecb ( int $cipher, string $key, string $data, int $mode )
Aunque hay algunos blogs que ponen que la estruct…

Tu propio gestor de correos con PHP

Ya hemos visto como enviar correos con PHP utilizando phpmailer, correos con adjuntos y con todas las posibilidades, ahora veamos como recibir y leer los correos que nos envían a nuestro buzón con la clase receivemail.

Incluimos la clase
include_once '../clases/receivemail.class.php';
// Creamos el objeto receivemail, es importante en esta función poner solo los 4 parámetros siguientes, en la mayoria de servidores de correo da fallo si incluimos el 5 parámetro el cual en teoría es para servidores que requieren autentificación, pero en la práctica no es necesario.
// Algunos de los errores que nos pueden dar son los siguientes:

Warning: imap_open() [function.imap-open]: Couldn't open stream {(host):(puerto)/(protocolo)}INBOX in (url_codigo) on line (linea)
Certificate failure for (host): self signed certificate: (url_certificado)

$obj= new receiveMail(USUARIO,CLAVE,DIRECCION_DE_CORREO,SERVIDOR);

// Connectar al buzon de correo por defecto pop3 y puerto 110

$obj->connect();

// Tota…

Enviar archivos PDF creados dinámicamente

Gracias a las clases DOMPDF y PHPMailer podemos crear un archivo PDF dinámicamente y enviarlo como adjunto en un correo electrónico. Actualmente el método que utilizo es crear el archivo PDF, adjuntarle al mail y borrarlo. Reconozco que lo ideal sería crear el archivo en memoria y enviarlo así evitamos tener que crearlo y borrarlo, pero aún no he encontrado una función que me tome al archivo como cadena lo convierta en un documento sin crearlo físicamente en el disco duro, o sea que sea todo
temporal; por ello si alguien lo sabe que lo comparta.

// incluyo las dos clases dompdf y php mailer

include_once '../class/class.phpmailer.php';
include_once '../dompdf/dompdf_config.inc.php';

// creo el objeto phpmailer
$mail = new phpmailer();
// asigno el envío por SMTP mucho más rápido y fiable
$mail->Mailer = "smtp";
// mi servidor requiere autentificación
$mail->SMTPAuth = true;
// utilizo constantes almacenadas fuera del script para darle más seguridad a los datos, ap…