En aquest cas d'estudi, analitzarem una aplicació web fictícia per identificar vulnerabilitats i implementar millores de seguretat. Aquest exercici pràctic ens permetrà aplicar els coneixements adquirits en els mòduls anteriors del curs.

Descripció de l'Aplicació

L'aplicació web que analitzarem és un portal de compres en línia anomenat "ShopSecure". Aquesta aplicació permet als usuaris registrar-se, iniciar sessió, cercar productes, afegir-los al carret de la compra i realitzar pagaments.

Funcionalitats Principals

  1. Registre d'Usuaris: Els usuaris poden crear un compte proporcionant un nom d'usuari, contrasenya i adreça de correu electrònic.
  2. Inici de Sessió: Els usuaris poden iniciar sessió amb el seu nom d'usuari i contrasenya.
  3. Cerca de Productes: Els usuaris poden cercar productes per nom o categoria.
  4. Carret de la Compra: Els usuaris poden afegir productes al carret de la compra.
  5. Pagament: Els usuaris poden realitzar pagaments utilitzant targetes de crèdit.

Identificació de Vulnerabilitats

  1. Injecció SQL

Descripció

L'aplicació és vulnerable a injeccions SQL en el formulari de cerca de productes.

Exemple de Codi Vulnerable

SELECT * FROM products WHERE name = 'product_name';

Solució

Utilitzar consultes preparades per evitar la injecció SQL.

Exemple de Codi Segur

SELECT * FROM products WHERE name = ?;

  1. Pèrdua d'Autenticació

Descripció

L'aplicació no implementa mesures adequades per protegir les sessions dels usuaris.

Solució

  • Utilitzar tokens de sessió segurs.
  • Implementar un temps de caducitat per a les sessions.
  • Utilitzar HTTPS per a totes les comunicacions.

  1. Exposició de Dades Sensibles

Descripció

Les contrasenyes dels usuaris es guarden en text pla a la base de dades.

Solució

  • Emmagatzemar les contrasenyes utilitzant un algorisme de hash segur com bcrypt.

Exemple de Codi Segur

import bcrypt

hashed_password = bcrypt.hashpw(plain_password.encode('utf-8'), bcrypt.gensalt())

  1. Cross-Site Scripting (XSS)

Descripció

L'aplicació és vulnerable a atacs XSS en el formulari de comentaris dels productes.

Solució

  • Escapar correctament les dades d'entrada dels usuaris.
  • Utilitzar funcions de sanitització per eliminar codi maliciós.

Exemple de Codi Segur

<!-- Escapar dades d'entrada -->
<input type="text" value="{{ user_input | escape }}">

Implementació de Millores de Seguretat

  1. Millora de la Gestió d'Autenticació

  • Implementar autenticació multifactor (MFA) per a una seguretat addicional.
  • Utilitzar llibreries de seguretat provades per gestionar l'autenticació i les sessions.

  1. Protecció de Dades Sensibles

  • Xifrar les dades sensibles com les targetes de crèdit abans de guardar-les a la base de dades.
  • Implementar controls d'accés estrictes per assegurar que només els usuaris autoritzats puguin accedir a dades sensibles.

  1. Millora de la Configuració de Seguretat

  • Configurar correctament les capçaleres HTTP per protegir contra atacs comuns com XSS i clickjacking.
  • Realitzar auditories de seguretat regulars per identificar i corregir vulnerabilitats.

  1. Monitoratge i Registre

  • Implementar un sistema de registre i monitoratge per detectar activitats sospitoses.
  • Configurar alertes per a esdeveniments de seguretat crítics.

Exercici Pràctic

Tasca

  1. Identifica i corregeix les vulnerabilitats en el codi proporcionat.
  2. Implementa les millores de seguretat descrites anteriorment.

Codi Inicial

# Exemple de codi vulnerable
def search_product(product_name):
    query = f"SELECT * FROM products WHERE name = '{product_name}'"
    # Executar la consulta SQL
    # ...

def register_user(username, password, email):
    # Guardar la contrasenya en text pla
    query = f"INSERT INTO users (username, password, email) VALUES ('{username}', '{password}', '{email}')"
    # Executar la consulta SQL
    # ...

Solució

import bcrypt
import sqlite3

def search_product(product_name):
    conn = sqlite3.connect('shopsecure.db')
    cursor = conn.cursor()
    query = "SELECT * FROM products WHERE name = ?"
    cursor.execute(query, (product_name,))
    results = cursor.fetchall()
    conn.close()
    return results

def register_user(username, password, email):
    hashed_password = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt())
    conn = sqlite3.connect('shopsecure.db')
    cursor = conn.cursor()
    query = "INSERT INTO users (username, password, email) VALUES (?, ?, ?)"
    cursor.execute(query, (username, hashed_password, email))
    conn.commit()
    conn.close()

Conclusió

En aquest cas d'estudi, hem identificat diverses vulnerabilitats en una aplicació web fictícia i hem implementat millores de seguretat per mitigar aquests riscos. Aquest exercici pràctic ens ha permès aplicar els coneixements adquirits sobre seguretat en aplicacions web i OWASP. Recordeu que la seguretat és un procés continu i que és important mantenir-se actualitzat amb les millors pràctiques i noves amenaces.

Curs d'OWASP: Directrius i Estàndards per a la Seguretat en Aplicacions Web

Mòdul 1: Introducció a OWASP

Mòdul 2: Principals Projectes d'OWASP

Mòdul 3: OWASP Top Ten

Mòdul 4: OWASP ASVS (Application Security Verification Standard)

Mòdul 5: OWASP SAMM (Software Assurance Maturity Model)

Mòdul 6: OWASP ZAP (Zed Attack Proxy)

Mòdul 7: Bones Pràctiques i Recomanacions

Mòdul 8: Exercicis Pràctics i Casos d'Estudi

Mòdul 9: Avaluació i Certificació

© Copyright 2024. Tots els drets reservats