Seguridad¶
La forma en que Elgg aborda los diversos problemas de seguridad es la misma que la del resto de aplicaciones web.
Truco
Para informar de una posible vulnerabilidad en Elgg, envíe un correo electrónico a security@elgg.org.
Contents
Contraseñas¶
Validación de contraseñas¶
The only restriction that Elgg places on a password is that it must be at least 6 characters long by default, though this may be changed in /elgg-config/settings.php
. Additional criteria can be added by a plugin by registering for the registeruser:validate:password
plugin hook.
Suma de la contraseña¶
Passwords are never stored, only salted hashes produced with bcrypt. This is done via the standard password_hash()
function. On older systems, the password-compat
polyfill is used, but the algorithm is identical.
Elgg installations created before version 1.10 may have residual «legacy» password hashes created using salted MD5. These are migrated to bcrypt as users log in, and will be completely removed when a system is upgraded to Elgg 3.0. In the meantime we’re happy to assist site owners to manually remove these legacy hashes, though it would force those users to reset their passwords.
Regulador de accesos¶
Elgg cuenta con un mecanismo de regulación de accesos que dificulta en gran medida los ataques de diccionario desde el exterior. Los usuarios sólo pueden hacer hasta 5 intentos de acceder al sistema durante un período de 5 minutos.
Restablecimiento de contraseñas¶
Si un usuario se olvida de su contraseña, se puede solicitar una nueva contraseña generada aleatoriamente. Tras la solicitud, se envía un mensaje de correo electrónico al usuario con una URL única. Cuando el usuario visita la URL, se le envía una nueva contraseña aleatoria por correo electrónico.
Sesiones¶
Elgg usa la gestión de sesiones de PHP con manejadores personalizados. Los datos de las sesiones se almacenan en la base de datos. La cookie de la sesión contiene el identificador de la sesión, que asocia el usuario con el navegador. Los metadatos del usuario se almacenan en la sesión, incluyendo su identificador, nombre de usuario y dirección de correo electrónico. El tiempo de vida de la sesión se controla desde la configuración de PHP en el servidor.
Fijación de la sesión¶
Elgg le protege contra la fijación de la sesión mediante la generación de un nuevo identificador de sesión cada vez que accede al sitio.
Robo de sesión¶
Advertencia
Esta sección resulta cuestionable.
Además de proteger contra ataques de fijación de sesión, Elgg cuenta con una comprobación adicional que intenta evitar el robo de sesión si el identificador de la sesión se ve comprometido. Elgg almacena una suma (hash) de la información del navegador web («user agent») y un secreto del sitio como huella dactilar de la sesión. El uso del secreto del sitio es un poco superfluo, pero la comprobación de la información del navegador podría evitar algunos intentos de robo de sesión.
Cookie de «recordarme»¶
Para permitir que los usuario permanezcan conectados durante más tiempo independientemente de que hayan cerrado el navegador web, Elgg utiliza una cookie (llamada «elggperm») que contiene lo que podría considerarse como un identificador de «super sesión». Este identificador se almacena en una tabla de cookies. Si existe y el código de la sesión de la cookie se corresponde con el código de la tabla de la cookie, el usuario correspondiente se identifica en el sitio de manera automática.
Autenticación alternativa¶
Nota
Esta sección no es muy precisa.
Para que un complemento pueda substituir el sistema predeterminado de autenticación de Elgg, dicho complemento debe substituir la acción predeterminada con la suya propia mediante register_action()
. También tendría que registrar su propio manejador «pam» mediante register_pam_handler()
.
Nota
La función pam_authenticate()
que se usa para llamar a los diferentes módulos tienen un error relacionado con la variable de importancia.
HTTPS¶
Nota
Debe activar la compatibilidad con SSL en su servidor para que las siguientes técnicas funcionen.
Para que el formulario de acceso se envíe mediante HTTPS, active «login-over-ssl» desde el panel de administración de Elgg.
Para que todo el sitio utilice SSL, cambie la URL del sitio para que en vez de «http» empiece por «https».
XSS¶
En Elgg se utilizan filtros para dificultar ataques de secuencias de órdenes en sitios cruzados (XSS). EL propósito del filtrado es eliminar JavaScript y otros datos de entrada peligrosos de los usuarios.
El filtrado se realiza mediante la función filter_tags()
. Esta función recibe una cadena de texto y devuelve la misma cadena pero filtrada. La función desencadena un gancho de complementos validate, input
.
De manera predeterminada, Elgg se distribuye con el código del filtro «htmLawed» como complemento. Los desarrolladores pueden añadir más código de filtrado o substituir el existente mediante complementos.
A la función filter_tags()
se la llama para todos los datos introducidos por usuarios siempre que dichos datos se obtuviesen mediante una llamada a la función get_input()
. Si por lo que sea no se quiera realizar ese filtrado con algún dato introducido por un usuario, la función get_input()
cuenta con un parámetro que permite desactivar dicho filtrado.
CSRF / XSRF¶
Elgg generates security tokens to prevent cross-site request forgery. These are embedded in all forms and state-modifying AJAX requests as long as the correct API is used. Read more in the Formularios y acciones developer guide.
Inyección SQL¶
La API de Elgg esteriliza todos los datos de entrada antes de ejecutar consultas contra la base de datos. Para más información, véase Base de datos.
Privacidad¶
Elgg usa un sistema de listas de control de acceso (ACL) para controlar qué usuarios tienen accedo a distintos contenidos. Para más información, véase Base de datos.