Mostrando entradas con la etiqueta OWASP. Mostrar todas las entradas
Mostrando entradas con la etiqueta OWASP. Mostrar todas las entradas

OWASP ESAPI PHP: Autentificación y control de sesiones

En esta última entrega vamos a ver como gestionar la autentificación de usuarios y las sesiones. Empecemos por enumerar las características que vamos a implementar en nuestra clase User:

  • Mejorar la gestión de sesiones
  • Implementar tokens CSRF
  • Generar hashes de las claves
  • Leer propiedades de los objetos desde la base de datos
  • Limitar el tiempo de las sesiones (expire time)
  • Establecer qué guardamos en las variables de sesión


OWASP ESAPI PHP: Accesos a la base de datos

En esta entrega vamos a tratar cómo defendernos de ataques SQL injection. Hay varias maneras de intentar protegerse ante ataques de este tipo, una de ellas es con el Encoder de ESAPI, pero si vemos la documentación encontraremos la siguiente advertencia:

No se recomienda este método. La aproximación adecuada es usar la interface PreparedStatement. Si, por alguna razón, su uso no es posible, entonces este método es una solución menos mala.

Así pues vamos a olvidarnos temporalmente de ESAPI para centrarnos en los PreparedStatement (parte de la librería mysqli de PHP). Su uso nos permite separar totalmente los datos de las sentencias SQL con lo que las consultas se vuelven mucho más seguras. Su implementación no es nada difícil, sólo requiere pensar de manera ligeramente distinta.

OWASP ESAPI PHP: Asegurando las entradas

Si probamos la aplicación desarrollada en la entrada anterior observamos que es vulnerable a un simple ataque SQL Injection como "1' AND 1='1" para logearnos o XSS como "<script>javascript:alert(1);</script>" tanto en los posts como en los comentarios. En esta entrega vamos pues a esterilizar (sanitize) las entradas del usuario.

Usaremos las clases de referencia de ESAPI (/src/reference) siempre que podamos ya que son sencillas implementaciones de las interfaces definidas en /src y suficientes para nuestros propósitos con pequeños cambios. Empezamos modificando ligeramente la clase  DefaultSecurityConfiguration ( /src/reference/DefaultSecurityConfiguration.php) para arreglar un pequeño bug que el equipo de OWASP no ha considerado necesario arreglar desde que se escribió el artículo original. Abrimos el archivo y ejecutamos un buscar + sustituir cambiando todos los $this->logSpecial por $this->_logSpecial. La función _logSpecial imprime un mensaje de error en pantalla y nos interesa que lo haga en un log así que la cambiamos por:
private function _logSpecial($msg)
{
     ESAPI::getAuditor('DefaultSecurityConfiguration')->warning(Auditor::SECURITY, false, $msg);
}

OWASP ESAPI PHP: Introducción

Hace tiempo estuve trasteando con la librería de seguridad OWASP ESAPI para PHP pero lo dejé por falta de tiempo y por la dificultad que tuve en encontrar información para usarla. Retomo ahora el tema adaptando un artículo elaborado en 2010 por Jack Kowalsky en el que hace una introducción al uso de la librería. He actualizado el código original a PHP 5.4.3.
OWASP ESAPI (Enterprise Security API) es una librería de seguridad implementada en varios formatos para desarrollar aplicaciones de bajo riesgo con la que se dispone de varios módulos que podemos utilizar y/o modificar adaptándolos a nuestras necesidades. Aparte de para PHP, existen versiones para Java (quizás la más documentada), .NET, ASP, Codlfusion, Python y Javascript.