2009-09-03 12 views
5

Come sviluppatore web sto usando PHP e so che devo preoccuparmi della sicurezza ma quando si usa un framework, c'è un sacco di codice e design che si inoltra ma che non hai fatto codice o design e ad esempio sto usando CakePHP.framework php e sicurezza

  • quindi, in questo caso con framework, quanto dovrei preoccuparmi per la sicurezza?

risposta

9

Si deve sempre continuare a rispettare i principi fondamentali di sicurezza:

  • non si fidano l'utente
  • mai fidarsi l'utente

Il che significa un pò:

  • filtro/convalida tutto ciò che riguarda l'applicazione
  • escape qualsiasi uscita.


Utilizzando un quadro non cambia più di tanto, se non che:

  • uscita al database spesso es qualche strato del quadro, che dovrebbe occuparsi di fuga
  • quadri spesso fornire soluzioni di filtraggio/convalida; usali ;-)
  • I quadri hanno spesso delle linee guida; leggili.


Come sidenote: lei ha detto questo:

c'è un sacco-di codice e design che si relè sul ma che hai fatto non è il codice o il design

Considerando che si sta utilizzando un framework noto che molte persone usano, questo codice è stato probabilmente più testato/revisionato di qualsiasi codice che si possa scrivere ;-)

Questo è un vantaggio di open-source, in realtà: non sei l'unico responsabile del codice, e molti occhi l'hanno visto - il che significa che molte mani l'hanno migliorato.

4

Ci sono molte cose da considerare quando si tratta di sicurezza in un'applicazione. Come ha detto Pascal, è una buona idea usare un framework popolare che ha visto un numero di persone guardarlo.

Vedo alcune aree di interesse per quanto riguarda CakePHP.

Il primo problema è l'utente finale. Dovresti aspettarti che qualcuno faccia qualcosa di sciocco su ogni pagina che costruisci.Alcuni esempi di questo sono:

  • Una persona che fa clic sul pulsante di invio rapidamente più e più volte. Questo potrebbe inclinare o incasinare il sistema in un modo se non stai attento. La soluzione per questo non è basata sul framework, ma piuttosto sulla metodologia e sui test di codifica.
  • SQL Injection e altre cose negative. Qualsiasi campo in una pagina può essere potenzialmente abusato, quindi ogni elemento del modulo deve essere disinfettato. CakePHP ha metodi semplici per prendersi cura di questi problemi di sicurezza. http://book.cakephp.org/view/153/Data-Sanitization
  • Gli URL puliti sono molto importanti. Non si dovrebbe mai progettare un sistema che permetta a un utente di accedere direttamente alle chiavi primarie intere. Ad esempio, se hai un sito che ha/show_user/2098, allora qualcuno può semplicemente digitare show_user/2097 per vedere l'account di qualcun altro. CakePHP ti consente di incorporare abbastanza facilmente slug o UUID per evitare che ciò accada.

In secondo luogo, devi preoccuparti degli attacchi relativi al codice e ai permessi stessi. Ad esempio:

  • Non utilizzare mai eval() o system() nel codice da dati che potrebbero provenire dall'utente finale. Ci sono state applicazioni in passato scritte in Perl che sono state dirottate a causa di questo problema.
  • La struttura della cartella e le autorizzazioni sono importanti per quanto riguarda la sicurezza. Gli utenti non dovrebbero mai avere accesso per entrare in una directory scrivibile. Con CakePHP la struttura delle cartelle è progettata in modo da poter indirizzare apache direttamente ad app/webroot. Ciò significa che la directory tmp è al di fuori del percorso Apache, rendendo il sistema un po 'più sicuro.

In terzo luogo, dovresti preoccuparti della protezione delle pagine di amministrazione e di chi dispone delle autorizzazioni per accedere a cosa.

  • CakePHP ha un componente Auth e Acl che consente di scegliere quali utenti possono accedere a quali pagine. Questo fa uso di sessioni di torta personalizzate che possono essere archiviate in un database, usando PHP o scritte nel file system.

Suggerirei di leggere su alcuni dei componenti importanti e di essere certi di averli configurati correttamente, per far si che tu abbia costruito un'applicazione senza difetti di sicurezza. Dai uno sguardo ad alcuni di questi elementi mentre cerchi ulteriormente: http://book.cakephp.org/view/170/Core-Components