| |

Laboratorio: no permitir que accedan directamente a las urls empleadas en Ajax

Cuando usamos Ajax en nuestras aplicaciones solemos usar un script específico que devuelva los datos preparados para que el cliente los interprete y los muestre.

En algunas ocasiones no suele ser de nuestro agrado que usuarios accedan directamente a las URLs empleadas para Ajax.

Para evitar esta situación se puede usar un script sencillo. Se tomará en cuenta el valor de la variable de entorno HTTP_REFERER, la cual nos devuelve desde qué página se accede a nuestro script.

$ref = getenv('HTTP_REFERER');

Si el contenido de esta variable es false entonces es que se ha accedido directamente desde el navegador, si no, es que se accede desde una página, también habrá que comprobar que la página es la que nosotros queremos.

<?php
$ref = getenv('HTTP_REFERER');
if (!$ref || $ref != '[nuestra url]') {
?>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"xhtml1-transitional.dtd">
<html>
<head>
<title>Sentido Web - Redireccionamiento Ajax</title>
</head>
<body>
<h1>Sentido Web - Redireccionamiento Ajax</h1>
<p><?php echo "Hola, son las ".date("H:i:s"); ?></p>
</body>
</html>
<?php
} else {
echo "Hola, son las ".date("H:i:s");
}
?>

En este caso mostraremos una página cuando no haya referer o no sea el que nosotros esperamos. También se podría hacer para que el referer estuviera en el servidor, pero eso lo dejo para que lo haga el que lo necesita.

Una funcionalidad parecida se podría usar por temas de accesibilidad, dependiendo de un parámetro que indique si se trata de una llamada Ajax o no, se devuelva la información para el script del cliente o se muestre la información en una página.

<a href="url-ajax.php" onclick="ajax('url-ajax.php?ajax=1')">Enlace</a>

En el caso de haber problemas de accesibilidad, el enlace accede a la página con la información. En caso contrario, ejecuta la funciona ajax(), indicándole que se trata de una llamada Ajax para que nos devuelva la información formateada, ya sea en XML o JSON o como queramos.

| |

Usar polimorfismo en PHP5 para acceder a diferentes BD

Gracias al tratamiento de objetos que nos permite PHP5, es posible diseñar aplicaciones de una forma más eficiente. Un caso de ello es el polimorfismo, lo cual va a permitir acceder y trabajar con diferentes tipos de bases de datos de una forma única.
En el artículo en el que hacemos referencia, explican detalladamente cómo usar el polimorfismo para acceder a datos mediante MySQL y SQLite. Para ello se crearán una clase abstracta y dos clases que extenderán de esta, siendo cada una de estas las encargadas de tratar el acceso a MySQL o a SQLite.
Después se deberá crear una clase que maneje estas clases, dependiendo de un parámetro, se usará una de las clases (MySQL o SQLite). Esta última clase será la que instancie el usuario final, por lo que para él será transparente el tratamiento que se haga de una u otra base de datos.
Algo que también destacaría de este artículo es la forma de no hacerlo, algo que me he encontrado en alguna ocasión en Java (donde hay polimorfismo desde siempre). La forma incorrecta de hacerlo es creando una única clase y diferenciando en cada método diferentes códigos dependiendo de si se trata de una BD u otra.
Abstracting Database Access Using Polymorphism with Objects in PHP 5

|

Drake: ejecuta aplicaciones CakePHP en Drupal

drake.pngDrake es un módulo de Drupal que nos permite ejecutar aplicaciones realizadas con CakePHP, se trata de un puente entre ambos.
Drupal es uno de los mejores CMS en PHP, pero que dispone de un pequeño framework, mientras que CakePHP es uno de los mejores frameworks de PHP pero que no dispone de gran funcionalidad como CMS. Por ello nace Drake, que se encarga de unirlos para conseguir desarrollar mejores aplicaciones.
Drake solo admite Drupal 5 debido a que sería costoso dar soporte a versiones de Drupal 4 y Drupal 5, ya que el API de Drupal 5 es bastante diferente al de la versión 4. La instalación parece muy sencilla, por lo que no creo que presente muchas dificultades su uso.
Drake
Vía / PHPDeveloper.org

|

Jaws: otro CMS en PHP

jaws.pngJaws es un CMS en PHP con el cual podremos crear nuestros propios sitios web.
Su interfaz es muy amigable, con un diseño limpio e iconos muy web 2.0, por lo que parece que su administración, por lo poco he visto en la demo, no representa mucha complicación.
jaws-control-panel.png
Dentro de Jaws podemos distinguir en gadgets, que son módulos que añaden funcionalidades a nuestra aplicación, y plugins, que modifican el texto de los gadgets.
Entre los gadgets oficiales tenemos uno para gestionar la inclusión de banners, blogs, chat, FAQ, navegador de ficheros, glosario, menu, organizador de fotografías y varios más. Además existen otros dos componentes que nos ayudarán en nuestros desarrollos: Wiki para la creación de XHTML válido mediante clases de PHP y Omni para la gestión de sesiones.
Un nuevo CMS a tener en cuenta, esperemos que la comunidad de desarrolladores la enriquezcan al igual que pasa con Drupal, WordPress u otros.
Jaws

|

Consola remota mediante PHP y Ajax

Os voy a pasar una referencia a script de php que nos proporciona una consola remota para ejecutar comandos desde una página web. Con ella podréis ejecutar comandos mediante php, teniendo en cuenta los permisos de php para poder ejecutar los comandos que pasemos.
phpconsola.png
Algunos os llevaréis las manos a la cabeza y no sin razón, pero la verdad es que a mí personalmente me vendría muy bien en ciertos proyectos en los que para ejecutar el más mínimo comando casi hay que enviar cien peticiones a la gente de redes encargada de los servidores de los proyectos. O cuando el acceso a telnet lo tienes restringido desde el trabajo.
Lo que está claro es que hay que añadirle toda la seguridad habida y por haber. En el artículo al que hago referencia, se pueden ver todos los controles de seguridad que hay que usar y copiar el script php necesario.
PHP and AJAX shell console

|

Amfphp: llamadas remotas desde PHP

amfphp.pngAmfphp es un RPC que nos permite comunicar datos entre el cliente (Flash, Flex, …) y el servidor (PHP).

Se trata de llamar a un método de un objeto local con varios parámetros y una función de vuelta y recibir los resultados. No hay que preocuparse de cómo se envian o reciben los datos, el cliente y el servidor (Flash y PHP) están sincornizados para ello. Te permite preocuparte sobre las características de tu aplicación más que por como se implementa, a parte de ofrecer un navegador que permite realizar los servicios y probrarlos antes de que se empiece a desarrollar el cliente.

Permite conectar PHP con: Flash y Flex con Remoting, JavaScript y Ajax con JSON y clientes XML con XML-RPC. Y entre las características que nos ofrece, nos encontramos con que es compatible con PHP4 y PHP5, sin necesidades de extensiones, es rápido y ligero, ofrece herramientas para ayudarnos en el desarrollo y es posible incluirlo en el framework que usemos.

Ejemplos de desarrollo usando Amfphp que nos pueden ayudar:

Amfphp

|

Composite Pattern en PHP 5

Aunque a la gente que trabajamos con Java este concepto nos es muy conocido, ha sido en PHP5 cuando han sacado los composite patterns para usar esta funcionalidad, la cual nos puede dar mucho juego.
Una composite pattern ofrece una sencilla interfaz que permite a los programadores de clientes trabajar con un componente o un conjunto de componentes de forma intercambiable. De hecho, según el código no se debe saber si se trata de un componente o de un conjunto de ellos.
Para ello se define una clase como abstracta y los métodos que la componen también. Luego habrá que crear otras clases que se extiendan de esta primera para poder tratar los diferentes tipos.
Un buen inicio para aprender a usar está técnica, que es sencilla aunque no lo parezca.
Introducing the Composite Pattern in PHP 5 – Introducing the basics of the composite pattern
Vía / PHPDeveloper.org

Suhosin: sistema de protección para PHP

Suhosin es un sistema avanzado de protección para PHP. Ha sido diseñado para proteger los servidores y a los usuarios de defectos conocidos y desconocidos del core de PHP y de las aplicaciones realizadas con PHP.
Viene en dos partes independientes que pueden ser usadas de forma separada o en combinación. La primera de ellas es un pequeño parche para el core de PHP que implementa unas protecciones de bajo nivel para solucionar vulnerabilidades desbordamiento del buffer y de formateo de cadenas de texto. La segunda parte es una extensión PHP que implementa las otras protecciones.
Suhosin es compatible a una instalación normal de PHP, lo cual significa que a su vez lo es de extensiones de terceros como ZendOptimizer.
Suhosin
Vía / PHP Security Blog

|

Microsoft AJAX Library con PHP

ajaxnetphp.pngASP.NET AJAX, la librería Ajax de Microsoft, está disponible para los usuarios de PHP (si es que hay algún valiente que se atreva). La gente de Microsoft ha resarrollado un proyecto en Codeplex que sirve de puente entre PHP y la librería de Ajax.
Aunque parezca mentira, se me ocurre una posible necesidad de esta libraría. Hay veces en el que proyectos grandes (y no muy organizados) se realizan en diversos lenguajes de programación y se puede dar la situación de que haya que acceder a la librería de Microsoft desde PHP.
La verdad es que es una posibilidad muy remota, pero aún así, alguna posibilidad ha tenido que pensar la gente de Microsoft para llevar a cabo este proyecto, porque no tiene mucho sentido crear un librería para usar un framework de Ajax hecho en .NET para usarlo con PHP, sobre todo cuando ya hay tantos frameworks para PHP que añaden esta funcionalidad y que son muy útiles.
Para quien tenga ánimos de usarla, comentarles que para ello es necesario instalar primero ASP.NET AJAX, y luego enlazar con la librería en PHP y en JS.
PHP for Microsoft AJAX Library
Vía / Brian Goldfarb’s Blog

| | | |

Cómo decir a Google que vuelva por nuestra página más tarde

Cuando tenemos nuestra página en mantenimiento y el motor de Google (Googlebot) u otro motor de búsqueda, se pasa por nuestra página para indexarla, no es correcto que obtenga una página no encontrada (404) o un error del servidor (500).
Según dicen en Google Webmaster Central lo correcto es mandar un código de red no disponible (503), pero el autor de este post recomienda también enviar un Retry-After para que vuelva a pasarse más tarde. También recomienda que a los motores de búsqueda se les envie a una página 503 y a los visitantes (menos a él) a una página 404 (página no encontrada).
Instruct Search Engines to come back to site after you finish working on it