La seguretat és un aspecte crític en el desenvolupament d'aplicacions web. Django proporciona diverses eines i mecanismes per ajudar a protegir les teves aplicacions contra vulnerabilitats comunes. En aquesta secció, explorarem les millors pràctiques de seguretat que hauríem de seguir quan desenvolupem aplicacions amb Django.
- Configuració de Seguretat Bàsica
1.1. Configuració de DEBUG
- Desactiva
DEBUG
en producció: Assegura't que la variableDEBUG
estigui establerta aFalse
en l'entorn de producció. QuanDEBUG
està activat (True
), Django mostra informació detallada sobre errors, la qual cosa pot ser útil per als desenvolupadors però perillosa en producció.
1.2. Configuració de ALLOWED_HOSTS
- Defineix
ALLOWED_HOSTS
: Aquesta variable ha de contenir una llista de dominis o adreces IP que poden servir la teva aplicació. Això ajuda a prevenir atacs de tipus Host Header.
- Protecció contra Atacs Comuns
2.1. Cross-Site Scripting (XSS)
- Utilitza plantilles de Django: Les plantilles de Django escapen automàticament les dades per defecte, prevenint la majoria dels atacs XSS.
- Utilitza el filtre
safe
amb precaució: Només utilitza el filtresafe
quan estiguis segur que el contingut és segur.
<!-- template.html --> <p>{{ user_input|safe }}</p> <!-- Només si estàs segur que user_input és segur -->
2.2. Cross-Site Request Forgery (CSRF)
- Activa la protecció CSRF: Django inclou protecció CSRF per defecte. Assegura't d'incloure el token CSRF en tots els formularis.
<!-- template.html --> <form method="post"> {% csrf_token %} <!-- altres camps del formulari --> </form>
2.3. SQL Injection
- Utilitza l'ORM de Django: L'ORM de Django gestiona automàticament l'escapament de les consultes SQL, prevenint atacs d'injecció SQL.
# views.py from .models import MyModel # Exemple de consulta segura results = MyModel.objects.filter(name=user_input)
- Configuració de Seguretat Avançada
3.1. Seguretat de les Cookies
- Configura les opcions de seguretat de les cookies: Utilitza les opcions
HttpOnly
,Secure
iSameSite
per protegir les cookies.
# settings.py SESSION_COOKIE_SECURE = True CSRF_COOKIE_SECURE = True SESSION_COOKIE_HTTPONLY = True CSRF_COOKIE_HTTPONLY = True SESSION_COOKIE_SAMESITE = 'Lax' CSRF_COOKIE_SAMESITE = 'Lax'
3.2. Seguretat de les Capçaleres HTTP
- Utilitza el middleware de seguretat de Django: Aquest middleware afegeix diverses capçaleres de seguretat a les respostes HTTP.
# settings.py SECURE_BROWSER_XSS_FILTER = True SECURE_CONTENT_TYPE_NOSNIFF = True X_FRAME_OPTIONS = 'DENY'
3.3. Encriptació de les Dades
- Utilitza HTTPS: Assegura't que la teva aplicació estigui servida sobre HTTPS per encriptar les dades en trànsit.
- Gestió d'Usuaris i Autenticació
4.1. Contrasenyes Segures
- Configura les opcions de contrasenya: Utilitza les opcions de configuració de contrasenya de Django per assegurar-te que les contrasenyes dels usuaris siguin segures.
# settings.py AUTH_PASSWORD_VALIDATORS = [ { 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', }, { 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 'OPTIONS': { 'min_length': 8, } }, { 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', }, { 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', }, ]
4.2. Autenticació de Dos Factors (2FA)
- Implementa 2FA: Considera la implementació de l'autenticació de dos factors per a una seguretat addicional.
- Monitorització i Manteniment
5.1. Registre d'Errors i Auditories
- Configura el registre d'errors: Utilitza el sistema de registre de Django per monitoritzar i registrar errors i activitats sospitoses.
# settings.py LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'file': { 'level': 'DEBUG', 'class': 'logging.FileHandler', 'filename': '/path/to/django/debug.log', }, }, 'loggers': { 'django': { 'handlers': ['file'], 'level': 'DEBUG', 'propagate': True, }, }, }
5.2. Actualitzacions Regulars
- Mantén el teu entorn actualitzat: Assegura't d'actualitzar regularment Django i les seves dependències per aplicar els últims pegats de seguretat.
Conclusió
La seguretat és un procés continu que requereix atenció constant. Seguint aquestes millors pràctiques, pots millorar significativament la seguretat de les teves aplicacions Django. Recorda que la seguretat no és només una qüestió tècnica, sinó també de bones pràctiques i consciència constant.
Amb això, hem cobert les millors pràctiques de seguretat per a aplicacions Django. En la següent secció, explorarem com utilitzar Docker amb Django per millorar la gestió i el desplegament de les teves aplicacions.
Curs de Desenvolupament Web amb Django
Mòdul 1: Introducció a Django
- Què és Django?
- Configuració de l'Entorn de Desenvolupament
- Creació del teu Primer Projecte Django
- Comprensió de l'Estructura del Projecte Django
Mòdul 2: Conceptes Bàsics de Django
- Aplicacions Django i Estructura del Projecte
- Enrutament d'URL i Vistes
- Plantilles i Fitxers Estàtics
- Models i Bases de Dades
- Interfície d'Administració de Django
Mòdul 3: Django Intermedi
Mòdul 4: Django Avançat
- Consultes Avançades amb Django ORM
- Models d'Usuari Personalitzats
- Senyalitzacions de Django
- Proves en Django
- Optimització del Rendiment