2010-10-06 5 views
9

Sono un neofita della sicurezza delle app Web. Sto sviluppando un'applicazione in Cakephp e uno dei miei amici mi ha parlato degli attacchi di cross-site request forgery (CSRF) e cross-site scripting (XSS), ecc., Non so quanti altri ci siano.Cakephp Security

Ho bisogno di aiuto per capire come fare a Cakephp per difendere la mia app web contro questi. siamo a basso budget e al momento non possiamo assumere un consulente per la sicurezza. Stiamo ancora sviluppando l'app e prevediamo di rilasciarla entro la fine del mese. quindi voglio occuparmi delle cose iniziali che possono aiutarmi a non essere compromesso;)

risposta

17

Non c'è (e non può essere) uno strumento che puoi implementare e non devi mai più pensare alla sicurezza. L'implementazione di hack "anti-XSS" come CakePHP Sanitize::clean verrà bloccata dagli utenti bloccando l'input valido, senza tuttavia rendere l'app sicura. Gli hack del filtraggio degli input sono nella migliore delle ipotesi una misura di offuscamento, non una soluzione per i buchi di sicurezza.

Per avere un'applicazione Web protetta, è necessario scrivere un'applicazione Web protetta, da zero. Ciò significa, in primo luogo, l'attenzione ai dettagli quando si inseriscono stringhe da un contesto a un altro. In particolare:

  • ogni volta che si scrive una stringa per il contenuto del testo HTML o valore di attributo, HTML-escape esso (htmlspecialchars()) per evitare HTML-iniezione che porta a XSS. Questo non è solo una questione di input dell'utente che potrebbe contenere attacchi, è il modo corretto per inserire testo semplice in HTML.

    Nei casi in cui si utilizzano metodi di helper HTML, questi devono occuparsi dell'esclusione HTML di tali elementi per impostazione predefinita (a meno che non si spenga escape); è molto spiacevole che il tutorial di CakePHP includa la cattiva pratica di echoing di stringhe senza escape in HTML per il testo al di fuori degli helper HTML.

  • ogni volta che si creano query SQL con valori stringa, SQL-escape (con una funzione appropriata per il database come mysql_real_escape_string).

    Se si utilizza l'ORM di CakePHP e non si scrive il proprio SQL, non ci si deve preoccupare di questo.

  • evitare di utilizzare l'input dell'utente (ad esempio nomi di caricamento file) per denominare i file sul filesystem (generare invece ID univoci puliti) o come qualsiasi parte di un comando system().

  • include il componente Security per aggiungere uno schema di token di invio modulo che impedirà XSRF su moduli generati da CakePHP.

+0

grazie per un corso intensivo sulla sicurezza. una domanda durante l'utilizzo di helper HTML non supporta htmlspecialchars() e mysql_real_escape_string() automaticamente? –

+0

Quando si usano helper HTML, 'htmlspecialchars()' viene eseguito di default, sì, a meno che non si imposti ''escape' => false'. 'mysql_real_escape_string()' non lo è, in quanto non ha senso essere l'output HTML di escape di SQL. Ciò deve accadere quando si parla al database (e verrà eseguito automaticamente se si sta utilizzando l'ORM). 'htmlspecialchars()' è necessario quando si esegue l'output di contenuto senza un helper, ad esempio contenuto non inline incorporato. per esempio. '

Ciao, !

'. – bobince

+3

"è molto spiacevole che il tutorial di CakePHP includa la cattiva pratica di echoing di stringhe senza escape in HTML per il testo al di fuori degli helper HTML" Sono d'accordo - in questo modo molti non sono consapevoli che questo è veramente brutto. – mark