Come si protegge Discourse dalle iniezioni SQL tramite l'user agent?

Ho notato che Discourse persiste l’user agent in alcune tabelle, come web_crawler_requests. È noto che gli attaccanti utilizzano il campo “user-agent” per iniettare codice malevolo, come negli attacchi Sleepy User Agent. Mi chiedevo se Discourse abbia implementato delle misure per proteggersi da questo tipo di attacchi.

Discourse è un’applicazione Rails, quindi sfruttiamo le protezioni del framework nel nostro progetto:

6 Mi Piace

Ciao @mbaker341997

La guida alla sicurezza di Rails offre una buona panoramica, ma a mio avviso non copre adeguatamente ciò che molti considerano (a ragione) il controllo più importante per mitigare gli attacchi di SQL injection.

La prima linea di difesa contro l’“SQL injection” è una solida validazione dei dati in ingresso.

Faccio un esempio diretto tratto dalla guida alla sicurezza di Rails (sopra);

La guida mostra questo semplice esempio:

Project.find(:all, :conditions => "name = '#{params[:name]}'")

che può essere sfruttato iniettando nei parametri di input:

' OR 1=1'

Tuttavia, ciò può essere prevenuto implementando una validazione rigorosa nel modello, ad esempio:

before_validation :filter_name_param

private

def filter_name_param

   ###  qui inserisci il tuo codice personalizzato per filtrare i parametri, assicurandoti che caratteri speciali e altro "codice pericoloso"
   ###  non arrivino mai vicino al database

end

Rails offre molte validazioni “pronte all’uso” che possono (e dovrebbero) essere incluse nei modelli per garantire che i parametri in ingresso vengano validati molto prima di avere la possibilità di entrare nel DB.

Ecco ulteriori informazioni sulle validazioni di Rails:

Molti dimenticano che la validazione dei dati in ingresso è la prima linea di difesa contro gli attacchi di SQL injection, e questo vale per tutto il codice web lato server come Ruby, PHP, Python, ecc. In generale, la validazione lato client può essere aggirata e deve essere quindi ripetuta anche lato server.

In particolare, consiglio di leggere la sezione “Validazioni personalizzate”:

Spero sia utile.

2 Mi Piace