es

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

June 18, 2021

Share

Table of contents

Quick Access

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](https://api.drupal.org/api/drupal/includes%21database%21database.inc/function/db_query/7.x). 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](http://www.doctrine-project.org/index.html) 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](https://en.wikipedia.org/wiki/Database_abstraction_layer). 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)](https://en.wikipedia.org/wiki/Cross-site_request_forgery) 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](https://api.drupal.org/api/drupal/developer!topics!forms_api_reference.html/7), 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 #}
[/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](https://www.drupal.org/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: * https://www.drupal.org/writing-secure-code * https://www.drupal.org/security * https://www.drupal.org/security/secure-configuration #### Symfony #### Las herramientas principales se encuentra dentro del [Componente de seguridad de Symfony](http://symfony.com/doc/current/components/security/authentication.html). Para mencionar algunas de las cosas tenemos * [Autenticación](http://symfony.com/doc/current/components/security/authentication.html) * [Manejo de sesión](http://symfony.com/doc/current/components/http_foundation/sessions.html) * Control de Accesos * [Firewalls](http://symfony.com/doc/current/components/security/firewall.html)