In NodeJS, qual è un buon modo per garantire che i dati inviati dall'utente nei moduli (di inserimento del testo) non siano dannosi?

4

Oltre alla scansione dei file caricati dall'utente, vorrei anche assicurarmi che i moduli per i profili utente, i commenti, ecc. non possano essere utilizzati in modo improprio per inviare script dannosi. Quali sono alcuni noti metodi per farlo? Il controllo degli attacchi di script script dovrebbe essere eseguito lato client o lato server?

FWIW, ho controllato alcuni moduli relativi alla sicurezza in NPM, ma in genere sembrano riguardare la sicurezza di altri moduli, ed è possibile che mi sia sfuggito qualcosa di utile.

Un modo di cui sono a conoscenza, è quello di eliminare tutti i tag HTML, ma penso che sia un po 'pesante e probabilmente non efficace in tutti i casi.

Aggiornamento: A seconda della domanda, probabilmente ha dato l'impressione di essere su xss, nonostante il tag di iniezione. Quindi questo è solo per chiarire che si tratta sia di xss, sia di SQL injection.

    
posta Yogesch 17.08.2015 - 12:21
fonte

4 risposte

1

SQL

La protezione contro le iniezioni SQL viene eseguita utilizzando istruzioni preparate. In generale, è consigliabile evitare la concatenazione manuale delle stringhe generate dall'utente nelle istruzioni SQL.

Utilizza invece l'annotazione ? e fornisci la stringa di input come parametro. Il driver si assicura di bloccare qualsiasi tentativo di iniezione SQL, così come l'input dell'utente inaspettato.

Esempio di MySQL -

PreparedStatement ps = connection.prepareStatement("INSERT INTO tbl VALUES (?)");
ps.setString(1, "'abc'); TRAUNCATE TABLE users; SELECT (1");
ps.executeUpdate();

Il tentativo di iniezione fallirà.

XSS

Puoi HTML sfuggire alle stringhe generate dall'utente o sostituire semplicemente < con &gt; e > con &lt; , prima di inviarlo al client o quando lo scrivi nel database.

Inoltre, dai un'occhiata al foglio Cheat di prevenzione dei falsi siti (CSRF) guida.

    
risposta data 07.09.2015 - 22:59
fonte
6

La rimozione dei tag HTML non è un approccio sufficiente per proteggersi da XSS. Considera il seguente input:

<scri<script>pt>

Se togli il tag <script> , viene creato un altro tag script. Questo è solo un esempio: ci sono molti altri attacchi che potrebbero essere usati.

Dovresti cercare di proteggerti da XSS sul lato server - in questo modo gli utenti non hanno la possibilità di modificare / ignorare il tuo codice lato client.

Proteggersi contro XSS è totalmente fattibile, ma dovresti assicurarti di utilizzare l'approccio corretto. Come al solito le istruzioni di OWASP su come proteggersi sono probabilmente il modo migliore per andare.

    
risposta data 17.08.2015 - 18:15
fonte
1

Ci sono due metodi principali che sono comunemente discussi quando si tratta di input dell'utente. Questi due metodi sono validation e sanitisation .

Entrambe dovrebbero essere fatte sul lato server. Le protezioni lato client non impediranno attacchi come scripting cross-site o SQL injection.

In particolare, penso che tu stia parlando di attacchi di cross-site scripting. Sembra che questo modulo di nodo ( link ) possa essere adatto a ciò che stai cercando di ottenere.

La rimozione di tutti i tag HTML non è necessariamente una grande idea. Questo perché lo scripting cross-site basato su eventi potrebbe essere ancora possibile. Ad esempio:

<a href="/yourprofilename">yourprofilename</a>

Se l'utente ha la possibilità di modificare la sezione yourprofilename , considera il seguente input:

" onfocus="prompt(document.location); autofocus"

Questo trasformerebbe il link in questo:

<a href="/" onfocus="prompt(document.location);" autofocus">yourprofilename</a>

Ciò attiverebbe lo scripting cross-site senza l'uso di tag HTML.

    
risposta data 17.08.2015 - 16:08
fonte
-1

Prova il modulo npm strip-js . Rimuove tutto il codice JavaScript da un testo HTML effettuando le seguenti operazioni:

  • Sanitizzazione HTML
  • Rimozione dei tag dello script
  • Rimozione di attributi come "onclick", "onerror", ecc. che contengono il codice JavaScript
  • Rimozione degli attributi "href" che contengono il codice JavaScript

link

    
risposta data 12.10.2016 - 17:34
fonte

Leggi altre domande sui tag