La página de Openbank o como NO tratar a tus clientes

AVISO: Debido a la migración de blog, he metido los comentarios en el propio artículo por motivos de archivo y comodidad. No se permiten nuevos comentarios en la entrada por afluencia de usuarios con otros problemas y algún que otro troll.

Aquí pretendo explicar las chapuzas de la nueva página de Openbank para desatender y perder a sus clientes.

Como todo el mundo sabe, los sistemas que manejan dinero suelen ser tratados como críticos y cualquier modificación a los mismos se prueba en paralelo durante meses para que no existan problemas a la hora de su implantación final.

Además, si se quiere conservar a todos los clientes y no perderlos debido a la migración, se suele hacer la página web compatible (al menos) con Firefox (lo normal sería que con cualquier navegador).

Por supuesto, se comprueba que todas las secciones de un sitio web así funcionen y de no hacerlo, al menos se habilita al servicio telefónico para poder hacerlo.

Además, si la política de seguridad exige que la clave de acceso (una mierda de 4 números) se la des al sistema automático no es normal que por una renovación de sus «sistemas» se la tengas que dar a la persona (sobre todo cuando el call center está en otro país, subcontratado y para colmo atendiendo varios servicios y no sólo banca) con lo cual la inseguridad es total.

CORRIJO: Según me dicen trabajadores de Openbank, tienen al menos 3 call-centers en España (y creo que no tienen ninguno más).

Bien, comencemos (lo anterior era un preludio a mi tortuoso camino hacia este post).

Leer más

GOsa: Administración de cuentas y sistemas en LDAP

GOsa es una herramienta gráfica vía web muy interesante que permite gestionar una ldap y crear cuentas de sistema: Unix, samba, correo, proxy, intranets, etc con muchas opciones.

Además, provee a los usuarios finales de un panel de control para que vean sus datos y cambien su clave, etc.

Hasta ahora, para la gestión de directorios LDAP yo usaba phpldapadmin (que no es precisamente la herramienta más completa pero sirve para explorar un ldap e incluso añadir datos de determinadas estructuras por defecto y facilita algo la vida). Sin embargo, en cuanto a lo que gestión de cuentas vía un interfaz web se refiere, GOsa, es lo mejor que he visto hasta ahora.

Leer más

Lighttpd con SSL

Todos los servidores web suelen tener métodos bastante estándares para añadir SSL, lo típico cuando se usa OpenSSL es (como ya he explicado en otro articulo anterior):

Generar la clave privada:

openssl genrsa -out serhost.com.key 1024

Generar la solicitud de certificado:

openssl req -new -key serhost.com.key -out serhost.com.csr

Ahora queda o bien enviar esa solicitud a una entidad certificadora (que nos cobrarán: 10$ (registerfly), 20$ (godaddy) a otros precios menos razonables como verisign que intentará cobrar más de 350$ por certificado, todas las compañías hacen lo mismo, pero unas tienen «mas nombre» que otras).

La otra opción es optar también por una entidad certificadora gratuita (cacert.org) que ya no está reconocida ni siquiera por firefox, para lo cual, mejor, autofirmamos nuestro certificado (nos dará un aviso que el certificado no está firmado por una autoridad certificadora de confianza, pero podemos aceptarlo de forma permanente).

Actualización: Desde que se creó este artículo, existen alternativas gratuitas como por ejemplo: letsencrypt.

Para firmarlo y obtener un crt:

openssl x509 -req -days 365 -in serhost.com.csr -signkey serhost.com.key -out serhost.com.crt

Ahora necesitamos el certificado en formato .pem (el .pem no es más que el archivo .key y a continuación el archivo .crt), luego los concatenamos:

cat serhost.com.key serhost.com.crt > serhost.com.pem

En mi caso he guardado todos estos archivos:

  • serhost.com.key
  • serhost.com.csr
  • serhost.com.crt
  • serhost.com.pem

En un directorio: ssl-certs, de modo que tengo todo un poco más clasificado, hay que recordar darles los permisos adecuados (que el propietario sea el usuario con que se ejecuta lighttpd y solo puedan ser accedidos por él).

Una vez tenemos todo esto (vamos a suponer que en: /etc/lighttpd/ssl-certs) editamos el fichero de configuración de lighttpd (que suponemos está en: /etc/lighttpd/lighttpd.conf) y añadimos al final:

var.confdir = "/etc/lighttpd"
$SERVER["socket"] == "127.0.0.1:443" {
ssl.engine = "enable"
ssl.pemfile = var.confdir + "/ssl-certs/serhost.com.pem"
server.name = var.confdir + "serhost.com"
server.document-root = "/var/www/localhost/htdocs/"
}

Las opciones creo que son autoexplicativas, también se puede establecer la opción:

ssl.ca-file = var.confdir + "/entidadcertificadora.crt"

que indicaría donde se encuentra el certificado con que ha sido firmado nuestro propio certificado.

Por último, comentar que lighttpd soporta PHP, python, perl, ruby, y que tiene soporte para virtualhosts y diferentes módulos útiles: mod_proxy, mod_auth, mod_alias, mod_cache, mod_deflate, mod_cgi, mod_accesslog, mod_rewrite, etc, además, sus fuentes comprimidos ocupan unos 700 KB y parece ser que funciona más rápido que apache, una vez compilado a mano con todas las librerías y el man correspondiente ocupa menos de 2 megas (tras pasarle el comando strip).

Más información:

  • Configuración extraída y adaptada de: http://www.varlogarthas.net/blog/2007/03/installing_a_godaddy_ssl_certi.html (el enlace ya no funciona)
  • Lighttpd: http://www.lighttpd.net

mod_autoindex de apache

mod_autoindex es un módulo de apache que nos permite mostrar un listado de archivos y directorios de un directorio cuando no hay un fichero index predeterminado (o si bien queremos mostrar este listado y obviamos este index).

La documentación de este módulo, puede encontrarse en: http://httpd.apache.org/docs/1.3/mod/mod_autoindex.html

A continuación pongo un ejemplo de un archivo .htaccess que añade una cabecera y un pie al listado, además, añade descripción a los distintos archivos:

Opciones (convertir iconos en parte del link, que coja anchos de las descripciones de forma automática y muestre primero las carpetas y luego ordene por fecha de modo que los archivos más recientes se encuentren al final):

IndexOptions +IconsAreLinks
IndexOptions NameWidth=* DescriptionWidth=*
IndexOptions +FoldersFirst
IndexOrderDefault Ascending Date

Añadir descripciones a los ficheros:

AddDescription "Instrucciones de instalación del programa" LEEME.txt
AddDescription "Aplicación" aplicacion.tar.gz

Añade una cabecera (en lugar de: Index of diretory/)

HeaderName cabecera.html

Añade el pie de página

ReadmeName LEEME.txt

Lo bueno de este sistema es que podemos integrar el diseño de nuestro sitio (y más si usamos CSS) con el listado de archivos predeterminado de apache.

Manejando OpenSSL

Cosillas útiles que dejo aquí para referencias posteriores:

Crear una llave privada RSA de 1024 bits sin cifrar por contraseña (para que sea más fácil trabajar con ella, si se quiere cifrar añadir -des3 y -out llaveprivada.key sin el > llaveprivada.key)

openssl genrsa 1024 > llaveprivada.key

Generar un certificado X509 de 999 días de validez usando la llave privada generada anteriormente

openssl req -new -x509 -days 999 -key llaveprivada.key -out certificado.crt

ó

openssl x509 -req -days 999 -in server.csr -signkey server.key -out server.crt

Crear un .pem a partir de llave y certificado (yo los concateno a mano estos ficheros, aunque se puede hacer con openssl pasando varios parámetros).

cat llaveprivada.key > certificado.pem
cat certificado.crt >> certificado.pem

Pasar de PEM (.PEM) a PKCS12 (.P12)

openssl pkcs12 -export -in certificado.pem -out certificado.p12

Al revés (por si hace falta convertir un p12 a .pem)

openssl pkcs12 -in certificado.p12 -out certificado.pem

Links externos:

Mi odisea con el código de meneame.net

Como conseguir que funcione el codigo de meneame.net en un hosting bastante capado (sin textutils, sin encoding, soporte para idiomas, etc).

Este mini-resumen presupone que sabes tocar mínimamente el código PHP, que has leído la guía de instalación y que sabes que es un sistema de promoción de noticias.

He conseguido después de una hora de andar trasteando (es la primera vez que instalo el software de meneame) que funcione bien e incluso forzar para publicar una noticia.

Leer más

Conflicto: No usar svn + mod_evasive

Cuidado, me he dado cuenta mirando el log de errores de mi apache2, tan contento como estaba con mod_evasive (lo había configurado con muy pocas páginas para que si una araña de spam accedía muy rápido a esta web o bien una araña de M$ que también gasta mucho ancho de banda se les prohibiese el acceso).

Problema: Si usas SVN (mod_dav, mod_svn…) te prohíbe el acceso, el motivo es evidente: Demasiadas peticiones cuando el repositorio es minimamente grande.

Podía leer una línea en el log que decía:

[Tue Oct AA XX:YY:ZZ BBCC] [error] [client X.Y.Z.T] client denied by server configuration: /AAA/BBB/CCC

He probado a quitar el mod_evasive y bingo! ya no hay un 403 PROPFIND (porque no estoy detrás de ningún proxy ni nada).

Si tengo que prescindir de algo, creo que de mod_evasive y ya intentaré configurar en QoS o con iptables lo que necesite o incluso mirando que más opciones tiene el propio mod_evasive.

Es debido a que mod_svn recibe muchas peticiones de un cliente (para sincronizar el repositorio), con lo que si está configurado para permitir pocas paginas por minuto, te bloqueará el acceso.

Desconozco si se puede filtrar por directorio o hacer alguna configuración distinta para donde tengas montado el svn.

Usando mod_rewrite para redireccionar subdominios

En este caso hace algún tiempo, me pidieron un .htaccess que mediante el uso de mod_rewrite permitiera que cualquier subdominio (por ejemplo: http://cualquiercosa.serhost.com) apuntase a una carpeta del dominio (ejemplo: http://serhost.com/pruebas/).

El motivo para hacer esto era que tenían un script que querían que fuese usado por todos los subdominios, imaginémonos un foro y que según el subdominio eligiese una base de datos u otra (para que fuese un foro de una u otra cosa). Las modificaciones al script de un foro (de un phpbb por ejemplo) son bastante reducidas (modificar un poco el config.php y poco más para según el subdominio hacer una u otra cosa).

De este modo la actualización del script en caso de un fallo de seguridad, sólo tendría que hacerse una vez y además no tendrías que tener múltiples copias del mismo script ocupando espacio.

A continuación el como lo hice…

Leer más

Cómo obtener las secuencias de escape para acentos, eñes, etc

Nada más fácil (lo he probado en java), existe un comando de consola que te permite hacerlo: native2ascii.

Hay muchas otras soluciones mejores o peores: (cambiando la codificación, usando buffers de bytes, etc)

Para usar native2ascii, ir a la consola e invocar ese comando, tecleear cualquier texto y pulsar enter, en caso de caracteres acentuados o eñes los cambiará por sus correspondientes secuencias de escape).

https://ant.apache.org/manual/OptionalTasks/native2ascii.html (ya no funciona el enlace)