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_tokenExercicis 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
pyotpper 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
