Domanda

Quale tipo di input è meno vulnerabile agli attacchi Cross-Site Scripting (XSS) e SQL Injection.

PHP, HTML, BBCode, ecc. Devo sapere per un forum che sto aiutando a creare un amico.

È stato utile?

Soluzione

Dobbiamo sapere di più sulla tua situazione. Vulnerabile come? Alcune cose che dovresti sempre fare:

  • Sfuggire alle stringhe prima di memorizzarle in un database per evitare iniezioni di SQL
  • HTML codificare le stringhe quando le si stampano di nuovo all'utente da una fonte sconosciuta, per prevenire html / javascript dannosi

Non eseguirò mai php fornito da un utente. BBCode / UBBCode vanno bene, perché sono convertiti in html semanticamente corretto, anche se potresti voler esaminare le vulnerabilità XSS relative ai tag di immagine non validi. Se si consente l'input HTML, è possibile inserire nella whitelist alcuni elementi, ma questo sarà un approccio complicato e soggetto a errori. Quindi, tenuto conto di tutti i precedenti, direi che usare una buona libreria BBCode standard sarebbe la soluzione migliore.

Altri suggerimenti

(Ho appena pubblicato questo in un commento, ma sembra che alcune persone abbiano l'impressione che elenchi, pulsanti di opzione, ecc. non debbano essere disinfettati.)

Non contare sulla sicurezza dei pulsanti di opzione. È comunque necessario disinfettare i dati sul server. Le persone potrebbero creare una pagina html sul proprio computer locale, creare una casella di testo con lo stesso nome del pulsante di opzione e fare in modo che i dati vengano registrati.

Un utente più avanzato potrebbe utilizzare un proxy come WebScarab e solo modificare i parametri non appena vengono postati sul server.

Una buona regola empirica è sempre utilizzare istruzioni SQL con parametri e sempre sfuggire ai dati generati dagli utenti prima di inserirli nell'HTML.

Nessuno di loro lo è. Tutti i dati attesi sul server possono essere manipolati da chi ha conoscenza e motivazione. Il browser e il modulo che prevedi vengano utilizzati dalle persone sono solo uno dei numerosi modi validi per inviare dati al tuo server / script.

Acquisire familiarità con l'argomento di XSS e problemi correlati

Qualsiasi tipo di booleano.

Puoi persino filtrare un input non valido abbastanza facilmente.

; -)

Esistono molti parser di codice BB che disinfettano l'input per HTML e così via. Se non ce n'è uno disponibile come pacchetto, è possibile consultare uno dei pacchetti software del forum open source come guida.

Il codice BB ha senso in quanto è lo "standard" per i forum.

L'input che è il meno vulnerabile all'attacco è il "non input".

Stai ponendo la domanda giusta?

Per l'amor di Odino, per favore non disinfettare gli input. Non aver paura che gli utenti inseriscano ciò che vogliono nei tuoi moduli.

L'input dell'utente non è intrinsecamente pericoloso. La risposta accettata porta a quei tipi di interfacce web come quella della mia banca, in cui il signor O'Reilly non può aprire un conto, perché ha un carattere illegale nel suo nome. Ciò che non è sicuro è sempre il modo in cui usi l'input dell'utente.

Il modo corretto per evitare iniezioni di SQL è utilizzare istruzioni preparate. Se il livello di astrazione del database non consente di utilizzarli, utilizzare rigorosamente le funzioni di escape corrette (myslq_escape et al). Il modo corretto per prevenire gli attacchi XSS non è mai qualcosa di simile agli striptag (). Esci da tutto: in PHP, qualcosa come htmlentities () è ciò che stai cercando, ma dipende dal fatto che stai generando la stringa come parte del testo HTML, un attributo HTML o all'interno di Javascript, ecc. Usa lo strumento giusto per il giusto contesto. E MAI stampare semplicemente l'input dell'utente direttamente sulla pagina.

Infine, dai un'occhiata alle 10 principali vulnerabilità delle applicazioni Web e fai la cosa giusta per prevenirle. http://www.applicure.com/blog/owasp-top-10-2010

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top