HTTPS al alcance de todos

Muchas son las ventajas de cifrar toda la información que viaja entre nuestro navegador y los servidores y dos eran los grandes inconvenientes:

  1. El precio de un certificado HTTPS empieza a partir de unos 80€ y para mayores requerimientos los precios pasan de los 200€
  2. El proceso de cifrar y descifrar afectaba al rendimiento.

Estos dos grandes inconvenientes han desaparecido:

  1. Ha nacido Let’s Encrypt, una autoridad emisora de certificados SSL gratuitos sin ánimo de lucro. Detrás está la Linux Foundation, Mozilla Foundation y la Electronic Frontier Foundation, entre otros.
  2. Ya no hay diferencias de rendimiento entre ambos protocolos.

Así que he pasado el sitio a HTTPS:

Certificado SSL

Certificado SSL

No lo he pasado simplemente porque pueda si no que hay tres poderosas razones para ello:

  1. La seguridad, especialmente vía Wifi. Los paquetes irán cifrados, así que puedes validarte con tranquilidad para comentar. También deja de ser posible que te roben la cookie con la que se identifica tu navegador.
  2. La privacidad. Así como lo que haces en Internet no es asunto de otros usuarios de tu red local tampoco lo es de tu proveedor de Internet (ISP) ni de nadie.
  3. Tanto Google Chrome como Firefox mostrarán un mensaje de alerta cada vez que una web no cifrada nos solicite datos sensibles. Además, con el objetivo de que HTTPS vaya reemplazando HTTP, Google penalizará ligeramente en los resultados de búsqueda a las webs no cifradas.
Validacion en web no segura

Validación en web no segura – Firefox

Formulario

Introduciendo la contraseña en una web no segura

Si una empresa hace servir sus servicios estaría bien que donara una parte de lo que se ahorra en certificados a Let’s Encrypt, cuyos gastos mensuales ascienden a 200.000$

Exportar datos a Excel con PHP

Excel

Cuando queremos que el usuario pueda exportar los datos desde una aplicación web para poder abrirlos como una hoja de cálculo lo más recomendable es hacerlo en formato CSV (Comma-Separted Values) Ahora bien, hay casos en que el cliente insiste en que desea que se le abra inmediatamente su Microsoft Excel al hacer click sobre el link o botón. En estos casos, cuando generamos el fichero «al vuelo», la cabecera debe ser:

header('Content-Type: application/vnd.ms-excel');

En vez de:

header('Content-Type: text/csv'; charset=utf-8);

Si los datos contienen caracteres más allá de los primeros 128 ASCII, por ejemplo acentos, al abrirse Excel veremos que estos caracteres no se visualizan correctamente. ¿Por qué? Aunque UTF-8 es de lejos la codificación más usada en la web, y lo más probable es que tu aplicación trabajé con ella, Microsoft Excel sorprendentemente no trabaja con este formato por defecto. Los de Redmond pueden haber perdido parte de su poder pero no su idiosincrasia. ¿Cómo arreglar este desaguisado? Pasando los datos a UTF-16LE (Lower Endian) e indicando la codificación en la cabecera, pues con esta codificación sí trabajan. Para lograrlo, PHP dispone de una función para convertir codificaciones: mb_convert_encoding()

El siguiente código de ejemplo deshace el entuerto. En $participations tenemos los datos a exportar, es un array. En este caso concreto, el código pertenece a una vista y por lo tanto el array ha llegado desde un controlador. El array $header contiene el nombre de cada columna para la hoja de cálculo y $fields contiene los índices de $participations, que coinciden con los nombres de los campos en la base de datos. Sigue leyendo

Los campos meta que Facebook impone

Facebook imponiendo su criterio en la web (todavía libre):

Resultados de la herramienta Sharing Debugger de Facebook al procesar una URL

Pueden deducirse todos todos los valores de otros meta tags pero no le gustan que no sean estrictamente los suyos. Y no son pocos, aquí sólo unos cuantos:

<meta property="og:type" content="website" />
<meta property="og:title" content="Título de la página" />
<meta property="og:description" content="Descripción de la página" />
<meta property="og:site_name" content="bla bla bla" />
<meta property="og:url" content="http://www.bla.com/lang/bla-bla-bla/bla/" />
<meta property="og:image" content="http://www.bla.com/images/bla/1/bla.jpg" />

Sigue leyendo