|

PHPIDS: seguridad en tus aplicaciones

phpids.pngPHPIDS (PHP-Intrusion Detection System) es una librería que podemos añadir a nuestras aplicaciones realizadas en PHP, que nos ofrece capa de seguridad de forma sencilla. No evita ni filtra ataques contra nuestra aplicación, tan solo detecta cuando se produce un ataque y actúa como nosotros queremos que lo haga.
Basado en un conjunto de filtros aprobados y testeados, cada ataque tiene asignado un número que valora su impacto en nuestra aplicación, lo cual hace sencillo decidir que acción tomar contra el intento de ataque, lo cual puede ser un mensaje de aviso por correo a los desarrolladores, mostrar un aviso al atacante o finalizar la aplicación.
La integración con nuestra aplicación es sencilla.
PHPIDS
Vía / PHPDeveloper.org

|

Ventajas de usar mysqli

A la hora de realizar aplicaciones PHP/MySQL, normalmente se suele utilizar la librería mysql, cuando existe la librería mysqli, la cual puede ser más eficiente.

Os paso 4 motivos que a mí me han parecido muy importantes:

  • Prepared statements: a parte de ser más cómodo a la hora de montar nuestras querys, ofrece mucha seguridad contra el SQL injected.
$mysqli = new $stmt = $mysqli->prepare("select usuario from usuarios where i = ?");
$stmt->bind_param('i',$id);
$stmt->execute();
  • Conexiones seguras: la posibilidad de usar mysqli_ssl_set() permite realizar conexiones seguras indicando detalles del certificado mediante los parámetros.
  • Múltiples querys: posibilidad de ejecutar varias querys separadas por punto y coma, en una conexión.
  • Interfaz orientado a objetos: esta característica permite al desarrollador ampliar el objeto para añadir nuevas funcionalidades más específicas. Por ejemplo se podrían separar los errores de operación (conexión) a los de desarrollo (querys mal formadas).

The Four Major Benefits of MySQLi

Vía / dzone

Comprobar si un puerto está abierto con PHP

Algo que nos puede ser muy útil cuando estamos haciendo aplicaciones distribuidas, es saber si el puerto de una máquina está abierto. Otro ejemplo es que si queremos incluir contenido de otro sitio en nuestra página y no queremos que nos devuelva una página de error no personalizado, podemos hacer lo mismo, comprobar si está el puerto 80 abierto:

<?php
// Dominio a comprobar
$sitio = "www.dominio.com";
// Puerto a comprobar, el web es el 80
$puerto = 80;
$fp = fsockopen($sitio,$puerto,$errno,$errstr,10);
if(!$fp)
{
echo "No ha sido posible la conexión";
// El modo de tratamiento del error puede ser el que se quiera, por ejemplo enviar un email.
}else{
echo "Conexión realizada con éxito.";
fclose($fp);
}
?>

PHP port check

Más internacionalización mediante PHP

La internacionalización es un tema del que ya he hablado con anterioridad, pero para mí es algo fundamental, quizás sea por la cantidad de proyectos en los que he trabajado que necesitaban de esta funcionalidad, a veces, para mi gusto, mal tratada.
En el anterior artículo ya hablamos de arrays asociativos, un array con clave el código del texto que deseamos traducir (un buen uso sería el mismo texto en el idioma inicial), y con valor el texto traducido. Debería haber un texto para cada idioma y luego al inicio de la aplicación una asignación del array correspondiente para el idioma.
En el artículo que comentamos nos explican cómo realizarlo mediante el uso de la funciones gettext, una interfaz de programación NLS, y el uso de ficheros PO (un fichero de texto plano que contiene el texto original y el traducido).
Sobre este método me da que pensar sobre su rendimiento. PHP al ser interpretado, todo lo que se meta, se lee y se interpreta. Si no se usa caché para los php, es mejor no introducir código innecesario en nuestros scripts. Según parece, el array asociativo con las traducciones se leerá completo en cada ejecución, cuando en algunos casos no será necesario traducir ni la mitad de las palabras.
En algunos proyectos el diccionario era bastante extenso, por lo que me planteo posibles soluciones para optimizar el código. Una posibilidad es dividir en diccionario por grupos independientes, pero este método hace que gestionar los diccionarios sea una labor más complicada. La otra solución es una carga inicial en cada script de las palabras estrictamente necesarias, habría que evaluar si el tiempo de carga de las palabras necesarias (para lo cual es necesario una operación inicial) es inferior al tiempo de carga completo (tan solo leer e interpretar). ¿Qué pensáis vosotros?
Give your web app international appeal

patTemplate: sistema de plantillas para PHP

patTemplate es un sistema de plantillas para PHP que nos permite separar la lógica de negocio del contenido en nuestras aplicaciones web.
Desde el punto de vista del diseñador, patTemplate ofrece una serie de etiquetas XML para acceder a diferentes partes del diseño, las cuales se puede ocultar, intercambiar o repetir. Los diseñadores deberán aprender nuevas etiquetas, pero no es necesario conocer ningún lenguaje de programación, ni usar instrucciones condicionales o de repetición.
Para los desarrolladores, tan solo es necesario aprenderse el API, lo cual no es muy complicado para programadores con experiencia.
patTemplate

PHP 5.2.3 disponible

PHPHa salido a la luz la nueva versión de PHP, en esta ocasión se trata de la versión 5.2.3, siendo recomendable su instalación.
Esta nueva versión soluciona 6 cuestiones de seguridad, una de ellas es la función mysql_set_charset() la cual permite modificar la codificación de la conexión.
Además entre optimizaciones y correcciones de errores, hay más de 40 cambios más, destacando la mejora de las funciones md5() y sha1().
PHP 5.2.3 Release Announcement
Vía / iBlog – Ilia Alshanetsky

Convertir un vídeo a FLV mediante PHP

En las nuevas aplicaciones web2.0 se está siendo cada vez más frecuente el que los usuarios puedan subir sus vídeos para luego compartirlos. No sé donde leí hace poco que una de las grandes luchas que han ganado la gente de Flash es el uso de vídeos FLV sobre los otros formatos que existían antes.

Si queremos que nuestra aplicación convierta los vídeos a Flash, el script siguiente nos ayudará a realizar el proceso. Para ello necesitaremos FFMPEG-PHP, FFMPEG y FLVTool2.

phpflv.png

El proceso es sencillo: inicialmente, una vez subido el vídeo, se realiza una llamada a FFPMPEG-PHP para obtener datos del vídeo (ancho, alto y FPS) para luego llamar a FFMPEG con los datos obtenidos y empezar la codificación, realizando también una llamada a FLVTool2 para obtener información sobre el fichero resultante.

How to convert/encode files to FLV using FFMPEG & PHP

Vía / PHPDeveloper y Asier Marqués

|

Listado de tutoriales de gestión de errores en PHP

Algo fundamental en cualquier aplicación web es la gestión de errores. Poder controlar los errores que se producen, no mostrar esos errores por pantalla, y poder hacer un seguimiento del error que se ha producido para poder solucionarlo, son cosas totalmente necesarias y que normalmente se suelen dejar a lado o solo usar en la época de desarrollo.

Para aquellos que quieran implementarse una clase que gestione los errores de su aplicación en PHP, le vendrá bien esta lista de tutoriales:

|

Oracle y PHP

La gente de Oracle han reescrito un libro que nos explica todo lo necesario para desarrollar aplicaciones en PHP que accedan a Oracle, está en formato PDF y la versión del documento es la 1.4. Este libro no es una guía completa de PHP y Oracle, ya que se supone que se tienen conocimientos básicos de PHP y SQL.

El libro está formado por 17 capítulos:

  • Introducción: introducciones sobre Oracle y PHP.
  • Extensiones PHP para Oracle: extensiones Oracle, OCI8 y PDO.
  • Instalación de Oracle Database 10g Express Edition: aunque el manual se centra en esta versión, también es válida para cualquier versión de Oracle actual.
  • Uso de Oracle Database 10g: trabajar con SQLs, PLs, crear usuarios, monitorear las sesiones, crear conexiones a la BD, crear informes y mucho más.
  • Instalar Apache: tanto en Linux como en Windows.
  • Instalar PHP: OCI en PHP4 y PHP5 tanto para Linux como para Windows y PDO en Linux y Windows.
  • Instalar Zend Core para Oracle: instalación y administración de Zend Core para Oracle.
  • Conectar a Oracle mediante OCI8: tipos de conexión, variables de entorno de Oracle, cerrar conexiones Oracle (algo que se suele olvidar hacer la gente).
  • Ejecutar SQL mediante OCI8: inserciones, modificaciones, transacciones, errores OCI8, tunning de aplicaciones.
  • Usar PL/SQL en OCI8: crear procedimientos, errores, cursores.
  • Objetos grandes: LOBs y BFILEs.
  • Uso de XML en Oracle y PHP: uso de la extensión SimpleXML y acceso a datos de Oracle mediante HTTP.
  • Globalización: manipulación de Strings, Locale, codificación de caracteres de los HTML, formato de fechas y números.
  • Debug.
  • Testing: ejecutar tests OCI8, fallo en los tests, creación de tests.
  • Nombre de funciones OCI8 en PHP.
  • Extesión de Oracle obsoleta: comparación entre la extensión Oracle y OCI8.

The Underground PHP and Oracle Manual

Vía / Christopher Jones on OPAL

Estructura básica para eventos o plugins en PHP

Actualmente las aplicaciones web (por ejemplo WordPress) permiten la ampliación de sus funcionalidades con el uso de plugins o eventos, dependiendo lo que se quiera hacer.
En el artículo que referenciamos, el autor crea una estructura para poder añadir plugins o eventos (explicándolo con eventos en este caso). El funcionamiento es el siguiente, se tiene un array de eventos, organizado por nombre del evento: el índice del array es el nombre del evento, cada posición del array almacena otro array con cada acción que se debe ejecutar.
Existen tres métodos: añadir evento, quitarlo y ejecutar las acciones del evento. Cuando se quiera añadir una acción a un evento, se debe indicar el nombre del evento y pasar la función que se quiere ejecutar. Cuando se ejecute un evento, se ejecutarán cada una de las acciones almacenadas en el array para ese evento.
A basic plugin and event architecture…
Vía / Good PHP Tutorials