Plataformas de desarrollo web a la hora de construir nuestros sitios y aplicaciones web de forma segura

June 18, 2021

A la hora de desarrollar nuestros proyectos web y móviles una de las muchas cosas en las que tenemos que pensar es la seguridad, es por eso que utilizar un framework puede brindarnos una manera más consistente y segura de desarrollar aplicaciones.

A continuación hablaremos algunas de las ventajas que puede traer a nuestro equipo utilizar un framework sobre construir nuestra propia herramienta.

Un framework ampliamente utilizado tiene una imporante implementación de seguridad.

Al ser un framework una plataforma base que está pensada en ser utilizada en una gama amplia de proyectos, la seguridad es un factor importante y un rango alto de la protección que comúnmente es necesaria ya está implementada.

Miles de gente probando probando constantemente la capa de seguridad de la aplicación

Al ser un framework utilizado por miles de personas, así mismo esto se traduce en miles de personas probando el código y encontrando fallas y constantemente mejorándolo. Al construir una plataforma por nosotros mismos, sólo nosotros la estaríamos probando y una falla de seguridad no sería reportada por nadie y podría ser utilizada en nuestra contra.

Invertir tiempo en la tarea, no en la tecnología

Construir una plataforma segura es una tarea demandante por lo que utilizar un framwork nos ahorra un gran trabajo y nos saca en parte de preocupación en cuanto al tema de seguridad, lo que nos permite invertir nuestro tiempo desarrollando nuestra tecnología o negocio, no la seguridad del mismo.

Garantía de actualizaciones a través del tiempo

A medida que son encontradas fallas, nuevas formas de atacar los sitios o vulnerabilidades, podemos asegurarnos que recibiremos actualizaciones de nuestra plataforma.

Protección contra ataques

En Rootstack es práctica trabajar con frameworks, a continuación algunos específicos de cómo nos protegemos de algunos de los ataques más comunes.

Sql Injection

Uno de los ataques más comunes en los sitios web. Las plataformas que usualmente usamos Drupal y Symfony tienen protección contra esto:

Drupal

Drupal provee una serie de funciones para acceder a la base de datos, la forma canónica de esto es la función db_query.

La función db_query permite realizar consultas parametrizadas, estas funciones realizan un reemplazo de placeholders con los argumentos correctamente escapados por el orden en que aparecen.

Ejemplo:

[prism:css] db_query("SELECT n.nid FROM {node} n WHERE n.nid > %d", $nid); db_query("SELECT n.nid FROM {node} n WHERE n.type = '%s'", $type); db_query("SELECT n.nid FROM {node} n WHERE n.nid > %d AND n.type = '%s'", $nid, $type); db_query("SELECT n.nid FROM {node} n WHERE n.type = '%s' AND n.nid > %d", $type, $nid); [/prism:css]

Nuevas funciones de Drupal también permiten usarlo como un PDO de PHP y enviar un arreglo de argumentos

[prism:css] db_query("SELECT t.s FROM {table} t WHERE t.field IN (:users)", array(':users' => $from_user)); [/prism:css]

O

[prism:css] $result = db_select('table', 't') ->fields('t', array('s')) ->condition('t.field', $from_user, 'IN') ->execute(); [/prism:css]

Symfony

Symfony utiliza en ORM para PHP llamada Doctrine lo que hace Doctrine es un mapa de la estructura en la base de datos y objetos en PHP además de servir como una capa de abstracción de base de datos.

Con Doctrine es posible realizar "prepared statements", este es un proceso de dos pasos en el que separamos la consulta de los parametros, de este modo los parametros son correctamente escapados por el ORM.

Algunos ejemplos de estas consultas:

[prism:css] // SQL Prepared Statements: Positional $sql = "SELECT * FROM users WHERE username = ?"; $stmt = $connection->prepare($sql); $stmt->bindValue(1, $_GET['username']); $stmt->execute();

// SQL Prepared Statements: Named $sql = "SELECT * FROM users WHERE username = :user"; $stmt = $connection->prepare($sql); $stmt->bindValue("user", $_GET['username']); $stmt->execute(); [/prism:css]

Ataques CSRF

Los ataques de Cross-site request forgery (CSRF) es un proceso donde un una solicitud es realizada hacia un sitio que causa una accion cuando realmente un usuario no estaba intentando realizar una accción.

Drupal

Con Drupal, protegerse de un ataque de CSRF es una tarea relativamente fácil.

En Drupal existe un API llamado el Form API, este API como su nombre lo dice puede ser utilizado para construir formularios. Este nos da una protección contra los CSRF automáticamente agregando unos tokens especiales cuando el formularios es generado.

Symfony

Symfony contiene un componente de seguridad que puede ser utilizado para protección de ataques de CSRF. El componente de symfony utiliza a la hora de generar un formulario in proveedor de tokens, que puede ser especificado.

[prism:css]

app/config/security.yml

security:

...
firewalls:
    secured_area:
        # ...
        form_login:
            # ...
            csrf_token_generator: security.csrf.token_manager

[/prism:css]

El anterior en un ejemplo de especifica el generador de tokens para el formulario de login. Ahora hay que agregar el token al formulario mismo:

[prism:css] {# src/AppBundle/Resources/views/Security/login.html.twig #}

{# ... #}

{# ... the login fields #} login

[/prism:css]

Otros elementos

Estos son algunos casos muy específicos de como estas plataformas nos pueden ayudar con la seguridad de nuestro código en nuestros proyectos.

Sin embargo hay muchísimas más herramientas dentro de estas dos plataformas que podemos utilizar dentro de nuestros proyectos.

Drupal

Drupal posee un equipo de Seguridad el Drupal Security Team que tiene una serie de responsabilidades dentro de la comunidad y plataforma:

  • Resolver los problemas de seguridad reportados.
  • Proveer asistencia a los desarrolladores que escriben módulos para Drupal.
  • Proveer documentación de como escribir código seguro.
  • Proveer documentación de como construir un sitio seguro.
  • Ayudar a mantener drupal.org seguro.

Además hay Drupal provee una serie de APIS y herramientas para mantener el código seguro.

Información sobre esto podemos encontrar en:

Symfony

Las herramientas principales se encuentra dentro del Componente de seguridad de Symfony.

Para mencionar algunas de las cosas tenemos