Crea tus propias extensiones para Firefox

La verdad es que no es algo sencillo, y los que nos hemos puesto a ello no hemos encontrado mucha ayuda para saber cómo realizar una nueva extensión. Los creadores de este tutorial, han sufrido lo mismo que el resto, pero esta vez han compartido su conocimiento con nosotros.
Un muy buen tutorial para aprender a crear una extensión, siguiendo el desarrollo de una aplicación, nos enseñan el paso a paso de cómo realizarla, desde los ficheros por los que está compuesto, preferencias por defecto, localización (multiidioma), distribución y seguridad.
Firefox Extension Development Tutorial
Vía / dzone

Elegir PHP 4 o 5

PHPAlgunas veces, cuando desarrollo un script para incluir en Sentido Web, me encuentro con el problemilla de que sólo funciona para PHP 5, cuando aquí tenemos instalado el 4 para evitar problemas de compatibilidad. Esta situación seguro que os a aparecido a vosotros. Si no estáis seguros de qué versión usar o qué problemas os podéis encontrar, nada mejor que leer el siguiente artículo.
PHP4 y PHP5: ¿Cuál elegir? ¿Migrar o no Migrar? El advenimiento de PHP6

links for 2006-08-03

Cuidado con el XHTML

Ahora que está más extendido el uso de XHTML, siempre viene bien darse cuenta de cosas en las que no caemos. He encontrado un artículo que me parece bastante interesante que nos avisa sobre el uso del XHTML.
Antes de nada diferenciar entre HTML y XHTML para poder comprender mejor con qué nos vamos a encontrar. HTML está definido por SGML y no necesita ser validado y los navegadores al encontrar errores en el uso de las etiquetas las ignoran y siguen presentando el documento. XHTML está basado en XML y como tal tiene que ser validado.
Un error común es usar el mismo Content-Type para ambos documentos, mientras que para HTML es text/html, para XHTML es application/xhtml+xml, por lo que cuando mandamos un XHTML como HTML, realmente le estamos eliminando todo aquello que le hace diferente, el XML, si no es XML no valida. El navegador trataría el XHTML como un conjunto de etiquetas sin orden, y cuando encuentre errores, los obviará o solucionará.
Otro problema que nos podemos encontrar es que si en un documento XHTML encerramos los scripts y las hojas de estilo entre comentarios HTML (&lt!– … –&gt), tal y como se hace en HTML, el validador XML lo tomará como comentario y lo ignorará. Recordad que los estilos y los scripts se deben encerrar entre <![CDATA[ … ]]>.
Tambien hay que pensar que si no lo tratamos como XHTML tendremos problemas si incrustamos código SVG o MathML ya que el navegador lo ignorará.
Más problemas, en XHTML todas las elementos deben tener su etiqueta de cierre, lo cual puede ser un problema si se trata como un HTML, ya que una etiqueta del tipo <br/> entrará en conflicto con las null end tags de SGML, algo que casi nadie usa. En SGML podemos traducir <title>Mi página</title> por <title/My page/, por lo que si se encuentra con un <br/>, si sigue esta regla de SGML, nos dirá que sobra un >.
Para variar, IE no acepta XHTML, y cuando recibe un documento con este formato, nos mostrará la ventana para guardar o abrir el documento.
Como conclusión, casi mejor pasarlo como HTML, nos evitamos problemas con IE y a parte la validación de XML es costosa.
Beware of XHTML
Vía / dzone

|

21 cuestiones sobre block, inline y floating en HTML

Una colección con 21 preguntas/respuestas sobre block, inline y floating en HTML. Para aquellos que se inicien en el mundo del HTML y tengan dudas sobre los diferentes tipos de elementos (bloques e inline), sobre los márgenes, el padding, los bordes…
Un FAQ muy sencillo, y muy bien explicado que nos puede resolver muchas dudas.
CSS Tutorials – HTML Formatting Model: Block, Inline and Floating Elements
Vía / Pixel Groovy

links for 2006-08-02

Miles de modelos de datos gratuitos

Para quien no sea muy hábil diseñando modelos de datos, o no tenga tiempo o simplemente no tenga ganas de pensar, os mostramos una lista de modelos de datos gratuitos que podemos usar en nuestras aplicaciones. Son del todo variopintos, puedes encontrar modelos de datos para blogs, e-commerce, clientes, facturas, compañías de ballet, comunidades indígenas, registro de payasos, ONGs, workflows, … vamos, que si no lo encuentras sería algo bastante extraño.
Library of Free Data Models
Vía / dzone

|

¿XMLHttpRequest nativo en IE7 o no?

IEUno de los anuncios que más esperamos del nuevo IE7 es que el objeto XMLHttpRequest (XHR) iba a ser nativo y no será necesario el uso de ActiveX. Tan solo es necesario crear una nueva instancia de este objeto new XMLHttpRequest() y seguirá funcionando si se desactivan las ActiveX.
Aunque ciertas dudas salen debido a algunos aspectos que han encontrado: xhr.prototype falla, parece ser que la creación dinámica de miembros del objeto falla, y la posibilidad de poder desactivar el objeto XHR. Estas dos cosas hacen sospechar que el objeto sea del todo nativo o no, o al menos que podamos contar con él como contamos con otros elementos HTML.
IE7 XMLHttpRequest – Native or Not?
Vía / aNieto2K

links for 2006-08-01

  • La aparición de cantidad de lenguajes y herramientas web están dando lugar a entornos de desarrollo cada vez más sofisticados y elegantes. Aptana es una muestra de ello, con un aspecto muy similar a Eclipse, disponemos de toda la información necesaria
  • Historias de nuevos medios El WSJ publicó ayer este interesante artículo, “Moguls of the New Media”, sobre las vidas de una serie de personas que, de manera más o menos premeditada, se han convertido en protagonistas absolutos de los nuevos medios defi
|

Evitar Cross-Site Request Forgeries en PHP

Siempre que hagamos una aplicación web, tenemos que tener muy encuenta las cuestiones de seguridad, sobre todo las formas más conocidas de ataque. Una de estas formas es Cross-Site Request Forgeries, que más o menos viene a decir Falsificación de Petición desde Otro Sitio (quizás la traducción no es exacta, pero creo que lo explica bien).

Este ataque se produce cuando a un usuario se le conceden permisos, confiando en él, pero no teniendo en cuenta que otra gente pueda aprovecharse de ello. Supongamos que tenemos una página de compra de artículos, cuya aplicación controla perfectamente los campos de entrada y que tiene una función que realiza la operación de compra de artículos.

Tenemos el formulario HTML:

<form action="compra.php" method="POST">
Artículo: <input type="text" name="articulo" />
Cantidad: <input type="text" name="Cantidad" />
<input type="submit" value="Comprar" />
</form>

El primer fallo que solemos cometer es leer las variables de entrada mediante $_REQUEST:

<?php
session_start();
if (isset($_REQUEST['articulo'] &&
isset($_REQUEST['cantidad'])) {
compra($_REQUEST['articulo'],
$_REQUEST['cantidad']);
}
?>

Una forma muy utilizada para realizar un ataque y que al autor del artículo le gusta mucho, es mediante el uso de una imagen:

<img src="http://ejemplo.org/compra.php?articulo=CAFETERA&cantidad=1000" alt="ads" />

Con esto conseguimos que el usuario que visita nuestra página tambien haga una petición a la página en cuestión sin que él lo sepa, claro, que esto solo funciona si el usuario a la vez tiene una sesión abierta en la página que se está atacando.

La solución es añadir una marca formada por un número “encriptado” y un tiempo para que tenga que renovarse esta marca. La marca se debe crear y pasar en el formulario por el que se envían los datos y a parte se debe controlar su existencia, si coincide y si no ha superado el timeout.

<?php
$marca = md5(uniqid(rand(), TRUE));
$_SESSION['marca'] = $token;
$_SESSION['tiempo_marca'] = time();
?>
<form action="compra.php" method="POST">
<input type="hidden" name="marca" value="<?php echo $marca; ?>" />
Artículo: <input type="text" name="articulo" />
Cantidad: <input type="text" name="Cantidad" />
<input type="submit" value="Comprar" />
</form>
<?php
if ($_POST['marca'] == $_SESSION['marca']) {
$diferencia_tiempo_marca = time() - $_SESSION['tiempo_marca'];
if ($diferencia_tiempo_marca <= 300) {
/* Menos de 5 minutos */
}
}
?>

Artículo original: Security Corner: Cross-Site Request Forgeries

Vía / backdraft