Archivo

Archivo para 30 noviembre 2011

Problemas con la ‘ñ’ u otros caracteres especiales en PHP

30/11/2011 Deja un comentario

Si estamos construyendo nuestra propia aplicación PHP o si usamos un CMS (Content Management System o Sistema de Manejo de Contenido) como WordPress, Joomla, Drupal, etc.., puede darse el caso de que mostrar datos previamente procesados por algún tipo de limpiador de String (para evitar inyecciones de código), no nos muestre correctamente ni las ‘ñ’ ni los acentos.

Para corregir esto y primero de todo, deberemos cerciorarnos de que nuestro sistema de representación de caracteres sea UTF-8, para que todos los símbolos de los lenguajes derivados del latín sean reconocidos. Deberemos escribir al inicio <meta chartset=”utf-8″ />” y comprobar que la base de datos también esté usando este sistema.

Una vez comprobado esto si continúan los problemas, hay que revisar el contenido del script, como hemos comentado al principio, buscando funciones anti-inyecciones de código del tipo:


$string = strip_tags($string);
$string = htmlentities($string);
return stripslashes($string);

El problema puede estar en la función es htmlentities(), que realiza una conversión de la string y la deja sin ‘ñ’ ni acentos, por esta razón algunas veces vemos sitios que usan CMS  y tiene problemas con estos caracteres sólo en algunas secciones del sitio (donde se llama a esta función).

La solución seria:

$string = htmlentities($string, ENT_QUOTES,’UTF-8′);

A la función es htmlentities() se le pueden pasar como argumento opcional (charset) el conjunto de carácteres usado para la conversión, en nuestro caso UTF-8.

Puedes consultar la ayuda que nos ofrece php.net sobre esta función pulsando aqui.

Categorías:Diseño y Programación Etiquetas: ,

Problemas en la instalación de Joomla 1.5.2

25/11/2011 Deja un comentario

Existe un error al instalar Joomla 1.5.2 o anteriores sobre un servidor web local (localhost). Este error también se produce cuando la versión de MySql es la 5.5.x

El error se produce al crear la estructura de la base de datos y nos muestra lo siguiente:

Para corregir este error deberemos hacer lo siguiente:

Debemos editar el fichero joomla.sql que se encuentra en la carpeta del joomla/installation/sql/mysql/

Con un editor de texto plano como el bloc de notas o un editor de html, buscaremos el texto TYPE=MyISAM CHARACTER SET `utf8` y lo sustituiremos TYPE por ENGINE. Podemos utilizar la herramienta buscar y reemplazar para agilizar el proceso.

Una vez hecho esto guardaremos los cambios de joomla.sql y reiniciaremos la instalación. Ahora ya debería de funcionar correctamente.

Os recordamos que ya hay disponibles nuevas versiones del Joomla que ya tienen corregido este error.

Categorías:Aplicaciones, Internet Etiquetas:

Seguridad en nuestras aplicaciones PHP (parte dos)

23/11/2011 Deja un comentario

Hace unos días un dimos unas directrices para que nuestra aplicación creada en php fuera más segura. Hoy vamos a ampliar dicha información con unos consejos más:

Evitar que se muestre la información de PHP

Si tenemos una pagina php cuyo contenido sea <? phpinfo() ?> al ejecutarla en nuesto servidor, obtendremos toda la información de PHP, módulos activos, rutas, datos de configuración, etc.

Para desactivar esta opción deberemos buscar “expose_php” en nuestro fichero php.ini y ponerlo a Off:

expose_php = Off

Utilización del Safe Mode

Por defecto el Safe_mode está “On” aunque la mayoria de CMS o aplicaciones web necesitan que esta directiva esté a “Off”. Esta directiva es para que los scripts PHP únicamente puedan acceder a los ficheros que tienen como propietario el mismo que ellos para evitar, por ejemplo, que tengan acceso de lectura a ficheros de sistema. Esto puede ser un problema en el momento que necesitamos acceder a información generada por otros usuarios en el sistema. La solución será la siguiente:

safe_mode = Off
safe_mode_gid = On

Si activamos safe_mode_gid en lugar de safe_mode, en lugar de revisar el usuario se revisará el grupo.

Visualizar los errores PHP

Para eliminar los mensajes de error que puedan servir de pista para los usuarios que puedan estar haciendo un mal uso de nuestros scripts desactivaremos la opción de mostrar los errores php:

display_errors = Off

Guardar los logs de los errores PHP

Si hemos desactivado “display_errors” podemos activar la opción para que dichos errores se guarden en un fichero log. Para ello deberemos escribir lo siguiente:

log_errors = On

error_log = /ruta/fichero/log

Os recordamos que para más información debéis acudir a la página oficial de php.

Seguridad en nuestras aplicaciones PHP

08/11/2011 Deja un comentario

Una vez tenemos nuestra página web colgada en internet, debemos protegerla de los posibles ataques que pueda recibir. Si estas usando un cms o cualquier otra aplicación (tienda online, foro, etc.), ésta deberá estar actualizada a la última versión estable. También comentamos unas directivas de PHP que deberíais revisar:

Ocultar la versión de PHP
Para evitar que con un telnet se pueda averiguar que versión de PHP hay corriendo en nuestro servidor, editaremos php.ini y cambiaremos a off la directiva:

expose_php = Off

Deshabilitar register_globals
Esta directiva está desabilitada en las versiones actuales de php ya que permite a un atacante manipular cualquier variable definida de forma global. Por si acaso deberemos revisar nuestro php.ini y comprobar que esté en off:

register_globals = Off

Evitar que aparezca el ID de sesión en la URL
Podemos desactivar la visualización de una URL con el ID de la sesión como esta:

http://dominio.com/?PHPSESSID=5mhjusibcsvmhgkiu196i6ka

modificando en el php.ini y poniendo a off (o a cero) la variable:

session.use_trans_sid = off

Deshabilitar funciones peligrosas
Existen una serie de funciones que pueden generar graves problemas de seguridad si un atacante logra utilizarlas. Recomendamos desactivar estas funciones y si en un momento dado son necesarias, se activarán o se buscarán alternativas. Para deshabitar dichas funciones utilizaremos disable_functions:

disable_functions =”system, passthru, escapeshellarg, escapeshellcmd, proc_close, proc_open, ini_alter, popen, show_source, pcntl_exec”

Podemos encontrar más información de cada función en el sitio oficial de php php.net

Mantener una sesión ssh abierta

05/11/2011 Deja un comentario

Puede darse el caso de que por alguna razón queremos que una sesión SSH se mantenga abierta, pero si SSH detecta que durante un tiempo no hay actividad, cierra la sesión y por tanto no podemos ver que está sucediendo en el servidor. Una solución a este problema sería habilitar los keepalive timeouts. Para ello editaremos el archivo ~/.ssh/config (para un usuario) o bien /etc/ssh/ssh_config (para todos los usuarios) y al final insertaremos:

ServerAliveInterval N: Donde N es el número de segundos que el cliente esperará antes de enviar un paquete al servidor para mantener la conexión.

ClientAliveInternal N: Donde N es el número de segundos que el servidor esperará antes de enviar un paquete al cliente.

ServerAliveInterval es la opción más común para mantener la sesión abierta, aunque queremos recordar que mantener la sesión abierta entraña un riesgo de seguridad y que si se utiliza esta opción para un momento dado, se restablezca lo antes posible ya que una sessión desatendida con ssh al root de una máquina es un caramelito para cualquier atacante que pueda acceder físicamente al terminal de origen.

Categorías:Seguridad