Introducció
La seguretat en aplicacions web és una disciplina crítica dins de la ciberseguretat que se centra en protegir les aplicacions web contra diverses amenaces i vulnerabilitats. Les aplicacions web són objectius freqüents per als atacants perquè sovint contenen dades sensibles i ofereixen múltiples punts d'entrada.
Conceptes Clau
- Vulnerabilitats Comunes en Aplicacions Web
a. Injecció SQL
- Descripció: Els atacs d'injecció SQL ocorren quan un atacant pot inserir codi SQL maliciós en una consulta SQL.
- Exemple:
SELECT * FROM usuaris WHERE usuari = 'admin' AND contrasenya = ' ' OR '1'='1';
- Prevenció: Utilitzar consultes preparades i paràmetres en lloc de concatenar cadenes SQL.
b. Cross-Site Scripting (XSS)
- Descripció: Els atacs XSS permeten als atacants injectar scripts maliciosos en pàgines web vistes per altres usuaris.
- Exemple:
<script>alert('XSS');</script>
- Prevenció: Escapar correctament les dades d'entrada i utilitzar funcions de sanitització.
c. Cross-Site Request Forgery (CSRF)
- Descripció: Els atacs CSRF forcen a un usuari autenticat a executar accions no desitjades en una aplicació web.
- Exemple: Enviar una petició POST maliciosa des d'un altre lloc web.
- Prevenció: Utilitzar tokens CSRF per verificar la legitimitat de les peticions.
- Autenticació i Gestió de Sessions
a. Autenticació Segura
- Descripció: Assegurar que només els usuaris autoritzats puguin accedir a l'aplicació.
- Bones Pràctiques:
- Utilitzar autenticació multifactor (MFA).
- Emmagatzemar contrasenyes de manera segura amb hashing i salting.
b. Gestió de Sessions
- Descripció: Protegir les sessions dels usuaris contra el robatori i la suplantació.
- Bones Pràctiques:
- Utilitzar cookies segures (Secure, HttpOnly).
- Regenerar els identificadors de sessió després de l'autenticació.
- Control d'Accés
- Descripció: Assegurar que els usuaris només puguin accedir als recursos per als quals tenen permisos.
- Bones Pràctiques:
- Implementar controls d'accés basats en rols (RBAC).
- Revisar i actualitzar regularment les polítiques d'accés.
Exemples Pràctics
Exemple 1: Prevenir Injecció SQL amb Consultes Preparades
import sqlite3 conn = sqlite3.connect('example.db') cursor = conn.cursor() # Consulta insegura usuari = 'admin' contrasenya = 'password' cursor.execute(f"SELECT * FROM usuaris WHERE usuari = '{usuari}' AND contrasenya = '{contrasenya}'") # Consulta segura amb paràmetres cursor.execute("SELECT * FROM usuaris WHERE usuari = ? AND contrasenya = ?", (usuari, contrasenya))
Exemple 2: Implementar Tokens CSRF en una Aplicació Web
<!-- Formulari HTML amb token CSRF --> <form method="POST" action="/submit"> <input type="hidden" name="csrf_token" value="{{ csrf_token }}"> <input type="text" name="dada"> <input type="submit" value="Enviar"> </form>
# Generar i verificar tokens CSRF en Flask (Python) from flask import Flask, request, session import os app = Flask(__name__) app.secret_key = os.urandom(24) @app.before_request def protect_csrf(): if request.method == "POST": token = session.pop('_csrf_token', None) if not token or token != request.form.get('csrf_token'): abort(403) def generate_csrf_token(): if '_csrf_token' not in session: session['_csrf_token'] = os.urandom(24).hex() return session['_csrf_token'] app.jinja_env.globals['csrf_token'] = generate_csrf_token
Exercicis Pràctics
Exercici 1: Identificar Vulnerabilitats
Descripció: Revisa el codi següent i identifica les vulnerabilitats de seguretat.
import sqlite3 conn = sqlite3.connect('example.db') cursor = conn.cursor() usuari = input("Usuari: ") contrasenya = input("Contrasenya: ") query = f"SELECT * FROM usuaris WHERE usuari = '{usuari}' AND contrasenya = '{contrasenya}'" cursor.execute(query) resultat = cursor.fetchall() if resultat: print("Accés concedit") else: print("Accés denegat")
Solució:
- Vulnerabilitat: Injecció SQL.
- Correcció: Utilitzar consultes preparades.
Exercici 2: Implementar Autenticació Multifactor
Descripció: Implementa un sistema d'autenticació multifactor en una aplicació web utilitzant Python i Flask.
Pistes:
- Utilitza una biblioteca com
pyotp
per generar codis OTP. - Emmagatzema els secrets OTP de manera segura.
Solució:
import pyotp from flask import Flask, request, session, redirect, url_for app = Flask(__name__) app.secret_key = os.urandom(24) # Generar secret OTP per a l'usuari secret = pyotp.random_base32() @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': usuari = request.form['usuari'] contrasenya = request.form['contrasenya'] # Verificar usuari i contrasenya (omès per simplicitat) session['usuari'] = usuari return redirect(url_for('otp')) return ''' <form method="post"> Usuari: <input type="text" name="usuari"><br> Contrasenya: <input type="password" name="contrasenya"><br> <input type="submit" value="Login"> </form> ''' @app.route('/otp', methods=['GET', 'POST']) def otp(): if request.method == 'POST': otp_code = request.form['otp'] totp = pyotp.TOTP(secret) if totp.verify(otp_code): return "Autenticació completada" else: return "Codi OTP incorrecte" return ''' <form method="post"> Codi OTP: <input type="text" name="otp"><br> <input type="submit" value="Verificar"> </form> ''' if __name__ == '__main__': app.run()
Conclusió
La seguretat en aplicacions web és essencial per protegir les dades i la integritat de les aplicacions. Comprendre les vulnerabilitats comunes i implementar bones pràctiques de seguretat pot ajudar a prevenir atacs i protegir els usuaris. En el proper tema, explorarem les proves de penetració i l'avaluació de vulnerabilitats per identificar i mitigar riscos en les aplicacions web.
Curs de Ciberseguretat
Mòdul 1: Introducció a la Ciberseguretat
- Conceptes Bàsics de Ciberseguretat
- Tipus d'Amenaces i Atacs
- Història i Evolució de la Ciberseguretat
Mòdul 2: Fonaments de Seguretat de la Informació
Mòdul 3: Seguretat en Xarxes
- Fonaments de Xarxes
- Protocols de Seguretat en Xarxes
- Firewalls i Sistemes de Detecció d'Intrusos (IDS/IPS)
Mòdul 4: Seguretat en Sistemes i Aplicacions
- Seguretat en Sistemes Operatius
- Seguretat en Aplicacions Web
- Proves de Penetració i Avaluació de Vulnerabilitats
Mòdul 5: Gestió d'Incidents i Resposta a Incidents
Mòdul 6: Compliment i Normatives
- Regulacions i Estàndards de Ciberseguretat
- Polítiques de Seguretat i Governança
- Auditories i Avaluacions de Compliment
Mòdul 7: Tecnologies Emergents i Tendències
- Intel·ligència Artificial i Ciberseguretat
- Blockchain i Seguretat
- Internet de les Coses (IoT) i Seguretat