SIMC-djangochecks
Questa app contiene una serie di check per le applicazioni Django sviluppate o commissionate dal Servizio Idro-Meteo-Clima (SIMC) di Arpae.
Utilizzo
Aggiungere l'app alle INSTALLED_APP
dell'applicazione:
# settings.py
# settings.py
INSTALLED_APPS = [
# ....
'simc_djangochecks'
]
Eseguire il check:
$ python manage.py check
Autenticazione e gestione password:
- Hashers: sono da evitare hasher basati su SHA-1 e MD5 e unsalted.
- Uso di
make_password
: si deve usare l'hasher di default e il salt generato dal suddetto hasher. - Validatori per le password (
AUTH_PASSWORD_VALIDATORS
):- È necessario usare dei validatori.
- Sono suggeriti una serie di validatori.
- Uso di
authenticate
: è preferibili usareLoginView
. - Backend di autenticazione (
AUTHENTICATION_BACKENDS
) consentiti.
Validazione dell'input
- Presenza di validatori per
forms.CharField
- Specifica del range per i field numerici delle form
- Presenza di validatori per
forms.JSONEncoder
- Presenza di validatori per
forms.FileField
- Presenza di validatori per
models.CharField
emodels.TextField
- Specifica del range per i field numerici dei model
- Presenza di validatori per
models.JSONField
- Uso del decoder e encoder di default per
models.JSONField
- Uso del modulo
pickle
- Uso di
exec
- Uso di
eval
- Uso di
RawSQL
- Uso delle keyword
extra
eextra_content
- Uso della keyword
shell
Validazione dell'output
- Uso di
safe
esafeseq
nei template - Uso di
autoescape on
- Uso di
mark_safe
- Uso di
DjangoTemplates
- Disabilitazione dell'autoescape nei settings
- Uso di
HttpResponse
conContent-Type: text/html
Gestione delle sessioni
- Uso del middleware
SessionMiddleware
- Uso del serializzatore
JSONSerializer
per le sessioni - Corretta configurazione del session engine:
- Database: installazione della corrispondente app
- Filesystem: la directory di salvataggio deve essere
diversa da
/tmp
,MEDIA_ROOT
eSTATIC_ROOT
- Cache: deve usare Redis
- Uso di cookie-based session: vietato
- Cookie di sessione con attributo
HttpOnly
- Cookie di sessione con attributo
SameSite=Lax|Strict
- Cookie di sessione con attributo
Secure
- Presenza di
CsrfViewMiddleware
- Uso di
@csrf_exempt
Logging
- Passaggio di
X-Request-Id
al logger - Corretta configurazione per rsyslog in produzione
Configurazione
- Assegnamento di settings fuori da settings.py
- Hard-coded
SECRET_KEY
ALLOWED_HOSTS
non deve contenere la wildcard*
- Informazioni potenzialmente sensibili hard-coded
- Path database SQLite deve essere diverso da
MEDIA_ROOT
,STATIC_ROOT
o/var/www/html
- Database SQLite non deve essere leggibile da
others
DATA_UPLOAD_MAX_MEMORY_SIZE
non deve essereNone
DATA_UPLOAD_MAX_NUMBER_FIELDS
non deve essereNone
DEFAULT_HASHING_ALGORITHM
non deve esseresha1
FILE_UPLOAD_PERMISSIONS
non deve essere accessibile aother
FILE_UPLOAD_DIRECTORY_PERMISSIONS
non deve essere accessibile aother
FILE_UPLOAD_PERMISSIONS
non deve avere permessi di esecuzioneFILE_UPLOADED_TEMP_DIR
non deve essere accessibile agroup
eother
FILE_UPLOADED_TEMP_DIR
non deve essere uguale o contenuto inMEDIA_ROOT
,STATIC_ROOT
o/var/www/html