En aquest tema, explorarem els requisits de seguretat establerts per l'OWASP Application Security Verification Standard (ASVS). Els requisits de seguretat són essencials per garantir que les aplicacions web siguin segures i estiguin protegides contra diverses amenaces. Aquests requisits cobreixen una àmplia gamma d'aspectes de seguretat, des de la gestió d'autenticació fins a la protecció de dades sensibles.
Objectius d'Aprenentatge
Al final d'aquest tema, hauràs de ser capaç de:
- Comprendre la importància dels requisits de seguretat en el desenvolupament d'aplicacions web.
- Identificar els diferents tipus de requisits de seguretat segons l'ASVS.
- Aplicar els requisits de seguretat en projectes reals.
Tipus de Requisits de Seguretat
Els requisits de seguretat segons l'ASVS es poden classificar en diverses categories. A continuació, es presenten les categories principals amb exemples de requisits específics per a cada una:
- Autenticació
- Requisit 1.1: Utilitzar mètodes d'autenticació robustos, com ara l'autenticació multifactor (MFA).
- Requisit 1.2: Assegurar que les contrasenyes siguin emmagatzemades de manera segura, utilitzant tècniques de hashing i salting.
- Gestió de Sessions
- Requisit 2.1: Generar identificadors de sessió únics i segurs.
- Requisit 2.2: Implementar mecanismes per a la terminació de sessió automàtica després d'un període d'inactivitat.
- Control d'Accés
- Requisit 3.1: Assegurar que els usuaris només puguin accedir a les funcionalitats i dades permeses segons els seus rols.
- Requisit 3.2: Implementar verificacions de permisos en cada acció crítica de l'aplicació.
- Protecció de Dades
- Requisit 4.1: Xifrar les dades sensibles tant en trànsit com en repòs.
- Requisit 4.2: Implementar controls per prevenir l'exposició de dades sensibles en registres i informes.
- Validació d'Entrada
- Requisit 5.1: Validar totes les dades d'entrada per assegurar que compleixin amb els formats esperats.
- Requisit 5.2: Utilitzar llistes blanques per validar les dades d'entrada en lloc de llistes negres.
- Gestió d'Errors i Registre
- Requisit 6.1: No revelar informació sensible en missatges d'error.
- Requisit 6.2: Implementar mecanismes de registre per a totes les accions crítiques i intents d'accés no autoritzats.
- Configuració de Seguretat
- Requisit 7.1: Assegurar que les configuracions de seguretat per defecte siguin segures.
- Requisit 7.2: Desactivar funcionalitats i serveis innecessaris per reduir la superfície d'atac.
Implementació dels Requisits de Seguretat
Exemple Pràctic: Validació d'Entrada
A continuació, es mostra un exemple de codi per a la validació d'entrada en una aplicació web utilitzant Python i el framework Flask:
from flask import Flask, request, jsonify
import re
app = Flask(__name__)
# Funció per validar correu electrònic
def is_valid_email(email):
regex = r'^\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'
return re.match(regex, email)
@app.route('/register', methods=['POST'])
def register():
data = request.get_json()
email = data.get('email')
if not email or not is_valid_email(email):
return jsonify({"error": "Invalid email address"}), 400
# Continuar amb el registre de l'usuari
return jsonify({"message": "User registered successfully"}), 200
if __name__ == '__main__':
app.run(debug=True)Explicació del Codi
- Funció
is_valid_email: Aquesta funció utilitza una expressió regular per validar que l'adreça de correu electrònic tingui un format correcte. - Ruta
/register: Aquesta ruta rep una sol·licitud POST amb les dades de registre de l'usuari. Valida l'adreça de correu electrònic abans de continuar amb el procés de registre. - Resposta JSON: Si l'adreça de correu electrònic no és vàlida, es retorna un missatge d'error amb un codi d'estat 400. Si és vàlida, es continua amb el registre de l'usuari.
Exercici Pràctic
Exercici: Implementació de Control d'Accés
Implementa un sistema de control d'accés en una aplicació web que permeti als usuaris amb el rol d'administrador accedir a una pàgina d'administració, mentre que els usuaris sense aquest rol rebin un missatge d'error.
Solució Proposada
from flask import Flask, request, jsonify
app = Flask(__name__)
# Simulació de base de dades d'usuaris
users = {
"admin": {"role": "admin"},
"user": {"role": "user"}
}
# Decorador per verificar el rol d'administrador
def admin_required(f):
def wrapper(*args, **kwargs):
username = request.headers.get('username')
user = users.get(username)
if user and user['role'] == 'admin':
return f(*args, **kwargs)
else:
return jsonify({"error": "Access denied"}), 403
return wrapper
@app.route('/admin', methods=['GET'])
@admin_required
def admin_page():
return jsonify({"message": "Welcome to the admin page"}), 200
if __name__ == '__main__':
app.run(debug=True)Explicació de la Solució
- Simulació de base de dades d'usuaris: Es crea un diccionari que simula una base de dades d'usuaris amb els seus respectius rols.
- Decorador
admin_required: Aquest decorador verifica si l'usuari que fa la sol·licitud té el rol d'administrador. Si no és així, retorna un missatge d'error amb un codi d'estat 403. - Ruta
/admin: Aquesta ruta està protegida pel decoradoradmin_requiredi només permet l'accés als usuaris amb el rol d'administrador.
Conclusió
En aquest tema, hem explorat els diferents tipus de requisits de seguretat segons l'ASVS i hem vist exemples pràctics de com implementar-los en una aplicació web. Els requisits de seguretat són fonamentals per protegir les aplicacions web contra diverses amenaces i assegurar que les dades dels usuaris estiguin segures. En el proper tema, aprendrem com implementar l'ASVS en projectes reals.
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
- OWASP Top Ten
- OWASP ASVS (Application Security Verification Standard)
- OWASP SAMM (Software Assurance Maturity Model)
- OWASP ZAP (Zed Attack Proxy)
Mòdul 3: OWASP Top Ten
- A1: Injecció
- A2: Pèrdua d'Autenticació
- A3: Exposició de Dades Sensibles
- A4: Entitats Externes XML (XXE)
- A5: Control d'Accés Trencat
- A6: Configuració Incorrecta de Seguretat
- A7: Cross-Site Scripting (XSS)
- A8: Deserialització Insegura
- A9: Ús de Components amb Vulnerabilitats Conegudes
- A10: Registre i Monitoratge Insuficients
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)
- Introducció a ZAP
- Instal·lació i Configuració
- Escaneig de Vulnerabilitats
- Automatització de Proves de Seguretat
Mòdul 7: Bones Pràctiques i Recomanacions
- Cicle de Vida de Desenvolupament Segur (SDLC)
- Integració de Seguretat en DevOps
- Capacitació i Sensibilització en Seguretat
- Eines i Recursos Addicionals
Mòdul 8: Exercicis Pràctics i Casos d'Estudi
- Exercici 1: Identificació de Vulnerabilitats
- Exercici 2: Implementació de Controls de Seguretat
- Cas d'Estudi 1: Anàlisi d'un Incident de Seguretat
- Cas d'Estudi 2: Millora de la Seguretat en una Aplicació Web
