Detectar UTF-8, ASCII e ISO 8859-1 en PHP

La importancia de los juegos de caracteres y los collation es algo básico para tratar con cadenas de textos y más aún si hablamos un lenguaje que no “entra” dentro del ASCII como es nuestro caso. En Linux Hispano ya hablamos en su momento de este tema:

Hoy volvemos a hablar, pero en un contexto más práctico. Cuando trabajamos con PHP, tenemos instrucciones que nos permiten codificar o decodificar texto en diferentes formatos, por ejemplo: utf8_decode o utf8_encode. Sin embargo, no existe un método que nos confirme de manera directa si el texto está en cierta codificación o no.

En PHP y Otras Yerbas, nos muestran una serie de funciones de gran interés para conseguir justo esto, detectar la codificación que usa un texto:

<?php define("UTF_8", 1); define("ASCII", 2); define("ISO_8859_1", 3); function codificacion($texto) { $c = 0; $ascii = true; for ($i = 0;$i<strlen($texto);$i++) { $byte = ord($texto[$i]); if ($c>0) { if (($byte>>6) != 0x2) { return ISO_8859_1; } else { $c--; } } elseif ($byte&0x80) { $ascii = false; if (($byte>>5) == 0x6) { $c = 1; } elseif (($byte>>4) == 0xE) { $c = 2; } elseif (($byte>>3) == 0x1E) { $c = 3; } else { return ISO_8859_1; } } } return ($ascii) ? ASCII : UTF_8; } ?> read more

Leer más » 2 Comentarios

Cambiar vista por defecto en Alfresco

Hace poco os comentaba cómo resolver el bug de las fechas en la traducción española  de Alfresco. Esta vez os comento cómo cambiar la vista por defecto. Las personas acostumbradas a trabajar con la vista de detalle, verán muy poco eficaz la vista basada en iconos que por defecto trae el DMS. read more

Leer más » 1 Comentario

Cambiar formato de fecha en Alfresco

Si trabajáis en un centro de cierto tamaño y tenéis necesidad de tener una gestión documental avanzada, una de las mejores soluciones que podéis utilizar es Alfresco (que por supuesto es software libre). Ya hablaremos otro día más y mejor de este software.

Hoy os comento cómo hacer que el formato de fecha aparezca bien en la traducción al español. El fichero de la traducción tiene un bug que hará que las fechas se muestren sin el año (todos sabemos lo vital de ese dato en un gestor documental). read more

Leer más » 13 Comentarios

Programar en XQuery

XQuery

A través de esta entrada podemos ver de forma breve como escribir nuestro primer programa con XQuery y cómo ejecutarlo en nuestra máquina Linux. A raíz de aquí podremos entender los fundamentos de XQuery.

Escribir un programa “Hola Linux Hispano” en XQuery.

Creamos el programa HolaMundo usando el editor nano (mi preferido, no, no es vi), como se muestra a continuación:

ahornero@Eee:~$ nano holamundo

( : HolaMundo con XQuery : )
let $i := “Hola Linux Hispano!”
return $i

Y una versión aun más simple de HolaMundo de la siguiente manera: read more

Leer más » 7 Comentarios

Configurar soporte HTTPS en Apache

Este tutorial describe cómo poner en marcha un servidor web con soporte HTTPS. El procedimiento lo he utilizado en un equipo con Scientific Linux, distribución derivada de Red Hat, por lo que en esta distribución y en otras derivadas como Fedora o CentOS debería ser el mismo. En Ubuntu, Debian y compañía será muy similar pero cambiarán algunas rutas y el sistema de paquetería.

El certificado utilizado es autogenerado y suponemos que tenemos ya instalado Apache.

Instalación de OpenSSL y mod_ssl

Lo primero que necesitamos es tener instalado el software necesario, para ello a través de yum hacemos lo siguiente:

yum install mod_ssl openssl

Generación del certificado

Primero generamos la clave privada, elegimos algoritmo RSA y 1024 bits:

openssl genrsa -out ca.key 1024

Ahora generamos el CSR (Certificate Signing Request), un fichero que crea una entidad para pedirle a una tercera que lo firme, verificando así que los datos de la primera entidad son correctos. De esta forma unas entidades van certificando a otras creando una cadena de certificación, donde la primera entidad de llama la raí­z de certificación.

openssl req -new -key ca.key -out ca.csr

Finalmente, nos autofirmamos el certificado:

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

Le hemos puesto un período de validez de un año, pero podéis cambiar a vuestro gusto este tiempo. OpenSSL os pedirá una serie de datos sobre el certificado y su entidad emisora (vosotros): correo electrónico, ciudad, país… a través de un interfaz en texto.

Cambio de rutas

El siguiente paso es mover los ficheros de la firma que acabamos de generar a la ruta correcta.

mv ca.crt /etc/pki/tls/certs
mv ca.key /etc/pki/tls/private/ca.key
mv ca.csr /etc/pki/tls/private/ca.csr

Configuración de Apache

Ya estamos listos para comenzar con la configuración de Apache. En las versiones más modernas de Apache, el fichero de configuración viene dividido en varios ficheros separados por temática para un acceso más rápido a la parte deseada. El fichero que vamos a editar es el siguiente: /etc/httpd/conf.d/ssl.conf.

Buscamos las siguientes líneas y le asignamos el valor correcto (no tienen por qué estar seguidas una de la otra):

SSLCertificateFile /etc/pki/tls/certs/ca.crt
SSLCertificateKeyFile /etc/pki/tls/private/ca.key

Host virtual

Para terminar crearemos un host virtual donde indicaremos a Apache dónde buscar las peticiones dirigidas al puerto 443 (las peticiones HTTPS). Definimos un host virtual al final de /etc/httpd/conf/httpd.conf:

NameVirtualHost *:443

Y luego la definición de las características en sí:

<VirtualHost *:443> SSLEngine on SSLCertificateFile /etc/pki/tls/certs/ca.crt SSLCertificateKeyFile /etc/pki/tls/private/ca.key AllowOverride All DocumentRoot /var/www/httpsdocs ServerName nombresitio.com </VirtualHost> read more

Leer más » 11 Comentarios

Instalar gvSIG en Ubuntu

Un grupo de desarrolladores de gvSIG, en colaboración con la compañia Creativa y la asociación gvSIG (la creadora del proyecto de la Generalitat Valenciana), ha desarrollado el conjunto de paquetes de instalación (.DEB) de gvSIG Desktop para Debian y Ubuntu. Esta distribución ha sido generada desde la versión final degvSIG Desktop 1.10.

La característica principal de esta versión es que usa la máquina virtual de Java de OpenJDK (la versión libre) en lugar de la correspondiente y archiconocida versión de SUN (Ahora Oracle). Están disponibles los paquetes para 32 y 64 bits. read more

Leer más » 5 Comentarios

Configurar un servidor de FTP anónimo con VSFTPD

A raíz de un comentario aparecido en una entrada anterior, que por cierto no entendí bien, comenté brevemente cómo poner en marcha un servidor de FTP anónimo usando VSFTPD. Sin embargo, el tema tiene mucho más que decir, por lo que aquí viene esta entrada que va a complementar a otras dos ya aparecidas anteriormente: read more

Leer más » 3 Comentarios

Permitir conexiones entrantes a un servidor PostgreSQL

Para los que venimos del mundo de MySQL y nunca antes hemos utilizado PostgreSQL, la configuración de los accesos externos a la base de datos puede parecernos algo confusa. El mecanismo, sin entrar en la tabla de gestión de usuarios, es algo más complejo pero tiene más posibilidades que en la base de datos recién adquirida por Oracle.

Veamos los pasos a dar.

1. Acceder al sistema

Para poder seguir los pasos, deberemos estar dentro del sistema, en la terminal del mismo. Si no tenemos acceso físico, podemos conectar vía ssh.

$ ssh miusuario@miservidorpgsql

2. Autenticarnos como usuario postgres

Una vez dentro del sistema, podemos hacer las operaciones como root, pero por seguridad o por si no disponemos de tales credenciales, lo mejor es actuar como usuario postgres:

su postgres

3. Permitir conexiones de clientes desde un determinado rango

Llegamos a uno de los puntos importantes de la cuestión, el fichero pg_hba.conf. Su situación exacta dependerá de vuestra instalación, pero lo encontraréis en una de estas dos rutas:

  • /var/lib/pgsql/data/pg_hba.conf (en mi instalación lo tengo ahí, utilizo Scientific Linux, una distribución derivada de Red Hat)
  • /etc/postgresql/main/pg_hba.conf

Dentro de este fichero, al final del mismo, veremos algo así:

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# "local" is for Unix domain socket connections only
local   all         all                               ident
# IPv4 local connections:
host    all         all         127.0.0.1/32          ident
# IPv6 local connections:
host    all         all         ::1/128               password

¿Qué significa esto? Veamos columna a columna:

  • Tipo: básicamente conexión local o conexión remota (host).
  • Base de datos: base de datos a las que afecta la regla. Si queremos todas, usamos el comodín all.
  • Usuario: usuarios a los que afecta la regla, si queremos que afecte a todos, usamos también all.

Nos paramos ahora en los dos apartados que más atención requieren.

3.a Dirección

En esta columna definimos, las direcciones IP (podemos también usar IPv6), desde las que podremos conectarnos a PostgreSQL. Usaremos la fórmula dirección/máscara:

  • Una sola dirección: 150.100.100.100/32
  • O un rango (ampliemos el mismo de antes): 150.100.100.0/24 (256 direcciones)

3.b Método

Aunque hay multitud de métodos para utilizar (incluyendo conexiones LDAP, Kerberos o PAM), explico los tres más básicos:

  • ident: utiliza el usuario del sistema desde el que se está intentado conectar.
  • trust: deja todos los accesos sin necesidad de autenticarse (sólo recomendable para conexiones desde el equipo local).
  • password: identificación con usuario/contraseña, es la más típica y es la recomendable para conexiones desde clientes como EMS PostgreSQL Manager.

Una línea de ejemplo, para darle acceso a todos los usuarios, a todas las base de datos, desde el rango de IP explicado antes, usando autenticación con usuario y contraseña, sería la siguiente:

host    all         all         150.100.100.0/24          password

4. Habilitar conexiones al socket desde clientes que no sean el host local

Al igual que en MySQL hay que configurar el bind-adress en my.conf, en PostgreSQL tenemos que hacer algo análogo.

Para versiones 8.x en adelante el procedimiento es el siguiente. Buscamos el fichero postgresql.conf en:

  • /var/lib/pgsql/data/postgresql.conf
  • /etc/postgresql/8.2/main/postgresql.conf

Y buscar dentro del mismo la siguiente línea:

listen_addresses='localhost'

Para sustituirla, por el comodín (para todas las IP, es una opción segura, tened en cuenta que tenemos también un filtro en el fichero pg_hba.conf.

listen_addresses='*' read more

Leer más » 10 Comentarios

Grabar DVD en Linux. 4 aplicaciones para ripear

Ya comentamos hace tiempo cómo grabar una imagen de un DVD o CD sin usar ninguna herramienta auxiliar. Lo que vamos a hacer en esta entrada es grabar un DVD de contenido multimedia para su posterior uso en otros medios y sin DRM.

Un rippeador de DVD nos permite copiar el contenido de un DVD en una unidad de disco duro. Las opciones pueden variar dependiendo del programa utilizado: transferencia de vídeo en DVD a diferentes formatos, hacer una copia de seguridad de contenido de DVD, convertir de DVD de vídeo para su reproducción en reproductores multimedia, streaming, e incluso a nuestro teléfono móvil. Algunos otros programas nos permitirán copiar discos protegidos, para que podamos usarlos sin restricciones (DRM). read more

Leer más » 12 Comentarios

Evitar listado de directorios con Apache

Introducción

Una de las acciones básicas de cara a mejorar la seguridad de un sitio web, es evitar que el servidor devuelva los listados del contenido de los directorios que son públicos. Una solución popular es incluir un fichero index.html vacío en todos los directorios que no deben ser listados o que no tienen un fichero que realice alguna función. Si estamos hablando de un sitio web con cientos o miles de directorios, esta opción queda descartada directamente. read more

Leer más » 3 Comentarios