Entradas

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

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

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()...

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

HTML 2 (F)PDF VS DOMPDF

Yo utilizo ambas clases pero dependiendo para que escojo una u otra, veamos las ventajas que veo en cada una de ellas. HTML2FPDF tiene una velocidad de creación de los documentos un poco más rápida pero no es algo realmente a considerar para diferenciar una de otra. Lo cual no es el caso para crear páginas horizontales para lo cual DOMPDF es perfecta pues con HTML2FPDF hay que hacer ciertos apaños como poner manualmente el ancho de la página para que te coja los márgenes correctamente sino te cra una página horizontal pero con los márgenes de una vertical, o sea que solo tienes espacio útil la mitad de la página prácticamente. El uso de CSS en ambas es realmente muy precario aunque si has de escojer debes utilizar DOMPDF que soporta unos cuantos más y según ellos lee archivos CSS, realmente no te va a cojer del archivo css ni la mitad de las propiedades. En cuanto a cabeceras, pies de página e imágenes ambos lo soportan en teoria. El uso de tablas es otro de los factores a tener en cue...

Errores en Zend Development Studio

Sin lugar a dudas Zend Development Studio es una de las herramientas más completas para implementar código PHP aunque como todo buen hijo de vecino no está excento de algunos pequeños detalles. Si alguno ha programado con el ZDS le habrán molestado sobre manera estos dos warnings que suele poner: include-var : Unsafe use of variable in call include()/require() bool-assign : Assignment in condition Son realmente 2 warnings que implican en cierta medida una ayuda al programador, el primero evita cualquier posible fallo de seguridad incluyendo en un archivo una url que es variable, lo cual podría (y digo podría) ser un fallo de seguridad. El segundo nos previene por si acaso se nos ha olvidado poner la doble = en una instrucción booleana, lo cual en muchos casos no es cierto pues realmente queremos que se asigne NO que se compare. Si queremos evitar estos warnings es de una forma sencilla aunque realmente tonta. Para el primero el ZDS considera inseguro que se incluya desde una variable p...

Validar fechas con javascript

No se las miles de veces que he tenido que validar fechas con javascript y la verdad es que siempre es un verdaddero encordio, aquí os dejo una pequeña funcion con la cual se crea un objeto fecha muchomás fácil de comparar si una fecha es menor que otra que con los if - else if - else. Espero que realmente os sirva de ayuda, a mi me viene genial function compruebaFechas(){ fecha_inicio =new String(document.frm_nuevo.fecha_inicio.value); hora_inicio = document.frm_nuevo.hora_inicio.value; minuto_inicio = document.frm_nuevo.minuto_inicio.value; fecha_fin =new String(document.frm_nuevo.fecha_fin.value); hora_fin = document.frm_nuevo.hora_fin.value; minuto_fin = document.frm_nuevo.minuto_fin.value; dia_inicio = parseInt(fecha_inicio.substr(3, 2),10); mes_inicio = parseInt(fecha_inicio.substr(0, 2),10) - 1; ano_inicio = parseInt(fecha_inicio.substr(6, 4)); dia_fin = parseInt(fecha_fin.substr(3, 2),10); mes_fin = parseInt(fecha_fin.substr(0, 2),10) - 1; ano_fin = parseInt(fecha...