Appunto, PHP è più insicuro di altri linguaggi, per usare le parole di Antirez:
la sicurezza non puo' essere affidata alla capacita' di non dimenticare mai un escape. [1] il problema appunto è che basta dimenticarsi qualche cosa e la sicurezza se ne va a farsi benedire.
Casi classici il $_POST (o $_GET) passato direttamente ad una variabile o peggio all'interno di una funzione senza un controllo su ciò che contiene, oppure la gestione delle sessioni che non è proprio perfetta ma anzi fa abbastanza schifo, basta pensare alla gestione del tempo di latenza che non è modificabile o meglio non funziona.
Io e un mio collega siamo diventati scemi dovendo implementare un sistema di timing che dopo 60 minuti faceva scadere la sessione ma tutto senza usare i cookie proprio per dare una maggiore sicurezza all'applicazione.
Niente. Alla fine abbiamo dovuto controllare l'ora di connessione noi tramite un file sul server, file che viene controllato ad ogni chiamata e confrontato con l'ora immediata, se la supera di 60 minuti la sessione scade.
Sistema pazzesco che fa perdere tempo anche alla macchina, pensa che ad ogni chiamata deve aprire il file e confrontarlo! Ma non c'è modo di fare altrimenti, ti basta leggere sulla pagina del manuale del PHP [2] tutti i commenti relativi al problema per capire che il bugs persiste.
E vogliamo parlare della gestione delle date? No vero?
Certo molto lavoro è stato fatto, ma moltissimo ne resta da fare è stato superato lo scoglio per cui tutti si erano messi contro chi non faceva che proporre nuove funzionalità (anche idiote) ma nessuno correggeva i vecchi bugs.
La versione 5 si può dire che è il nuovo corso, le funzioni solo C like style e finalmente solo quello. Non più nomi CamelCase e altri separati con l'underscore, menate certo, ma quando ti devi ricordare il nome di mille funzioni non lo sono più tanto, menate.
Ora i nomi di funzione compositi sono costruiti con il sistema dell'underscore, fanno eccezione i nomi abbreviati e insomma, quelli consolidato come i nomi delle funzioni di stringa, che so substr invece che sub_string oppure addcslash invece che add_c_slash.
E così pure la "purga" relativa alla priorità del passaggio dei parametri di una quasiasi funzione: prima il valore da cercare poi la stringa dove cercarlo, prima ogni funzione la feceva come gli pareva ed era facilòe sbagliarsi e creare un bug subdolo da trovarsi.
Insomma un bel guazzabuglio e lo è ancora, basta leggersi i bugs report per capire il caos che c'è dietro.
- Fixed safe_mode validation inside tempnam() when the directory path does not end with a /). (Martin Jansen)
- Fixed a possible open_basedir/safe_mode bypass in session extension identified by Grzegorz Stachowiak. (Ilia)
- Improved LCG entropy. (Rasmus, Samy Kamkar)
E' in homepage [3] relativamente all'ultima versione stabile della serie 5.2.x la .13 appunto, dove si parla ancora di bugs relativi al safe_mode la più grande scemenza del PHP dopo le variabili globali (te le ricordi le $_HTTP_ECCETERA?)
Eppure si usa e molto anche. Punti di forza le migliaglia di applicazioni realizzate in PHP pronte da usarsi, ma ve li ricordate i bugs di PHPBB uno dei primi forum o dei vari PHPNUKE e fratelli, uno dei primi CMS; secoli fa certo, ma una delle applicazioni in tal senso più usate come Joomla! erano un colabrodo fino a pochi giorni fa e forse lo sono ancora.
Non voglio dire che la colpa è tutta del PHP, i programmatori ce la mettono tutta a sbagliare da soli ma certo il linguaggio gli da una mano.
Però è sicuramente il più usato, il più intuitivo, è gratuito e si trova su quasi ogni server in rete, l'accoppiata PHP/MySQL è davvero una gran cosa e per questo soltanto vale la pena studiarlo e stargli dietro.
[1]
http://antirez.com/post/33
[2]
http://it.php.net/manual/en/function.session-cache-expire.php
[3]
http://it.php.net/