Newsgroup: it.comp.www.php
Titolo: sicurezza PHP

Ciao a tutto il gruppo.
Ieri sera stavo parlando con un'amica, anche lei non esperta ma
appassionata di informatica, un po' come me. Ci stavamo chiedendo
qualcosa che a voi è senz'altro chiaro: "quanto è sicuro il PHP"? La
domanda appare sciocca, eppure, se ci pensate bene, sui manuali per
principianti il tema non viene affrontato.
Personalmente sono (quasi) certa che se sul mio spazio web inserisco una
pagina.php al cui interno c'è scritto
<?php
$variabile="ciao mondo";
?>
nessuno, tranne forse qualche hacker, sarà in grado di leggerne il
contenuto. Sapete dirmi "quanto" mi sbaglio? ^_^
Grazie a tutti.
-- 
Nicoletta

 ha scritto nel
messaggio
news:1fpuudo.lgju823v2vrkN%nico.mare_antispam_@_antispam_libero.it...

Io, penso al 99%... hacker a parte :-)
Saluti, Unf

 contenuto. Sapete dirmi "quanto" mi sbaglio? ^_^ Grazie a tutti.
Credo che l'unica maniera di leggere il sorgente sia quella di scaricarlo
in FTP, cioe' di non far passare il file attraverso il web server (apache
o altro).
Diciamo che il sito e' sicuro quanto e' sicura le password di accesso:
se e' il nome del tuo cagnolino ti conviene cambiarla! 
Comunque i buchi di sicurezza possono arrivare anche da altre parti: dai
un'occhiata al marchingegno su
http://www.or-com.com/pc_monitoring.htm
ciao
Marco
-- 
bernama -lumaca- libero -Punto- it
Un camaleonte davanti ad uno specchio di che colore diventa?
+- PHPRndSig 0.02 --------------------------------------------33/52-+

 contenuto. Sapete dirmi "quanto" mi sbaglio? ^_^
Allora... il discorso è lungo e articolato. Mo' ci provo e se vien fuori 
  qualcosa di buono lo metteranno nelle Faq :-)
Ci sono diversi aspetti da considerare:
1) Problemi di sicurezza legati alla gestione del server: ovvero, la 
possibilità di far girare programmi di utenti diversi con diritti 
diversi, e così via. Qui l'installazione "base" di php non aiuta per 
niente, in quanto nella maggior parte dei casi ogni script gira con gli 
stessi diritti (Quelli del server apache), quindi a meno di magheggi 
applicativi, che comunque lascerebbero il tempo che hanno trovato, se ci 
sono particolari esigenze legate ad esempio a server acceduti da utenti 
non fidati e così via, è necessario fare delle installazioni ad hoc 
(safe mode, wrapper per settare l'userID e così via: per vedere COME 
farle rimando ad altre fonti).
2) Problemi di sicurezza derivanti da abusi esterni: qui si deve 
dividere il problema in due grandi categorie: i rischi derivanti da PHP 
in sè e quelli derivanti dall'applicazione.
Nella prima famiglia rientrano tutti gli exploit derivanti da bug di PHP 
(e purtroppo ce ne sono stati di eclatanti), cattive configurazioni, e 
altre "mancanze" che un webmaster serio non può permettersi di 
trascurare perchè ahimè spesso portano a dolorose perdite di tempo e di 
immagine, dopo il passaggio del primo lamerone di turno.
In altre parole: NON DIMENTICATE MAI VERSIONI VECCHIE SU SITI APERTI AL 
PUBBLICO, E NON FIDATEVI MAI DEL PRINCIPIO "Tanto perchè mai dovrebbero 
venire a bucare proprio me?"
L'altro aspetto legato a possibili utilizzi "illegali" di 
un'applicazione PHP è derivante dal modo in cui è scritta. In linea di 
massima, il problema è che in ambito web fare delle supposizioni sul 
tipo di dato che viene sottomesso all'applicazione non è lecito. Un 
utente malizioso può facilmente "iniettare" valori non previsti ad uno 
script per provocare volutamente funzionamenti diversi da quelli per cui 
lo script è progettato e potenzialmente rischiosi.
Per difendersi da questi rischi l'unica è scrivere a modo le 
applicazioni: l'eliminazione delle variabili globali autoregistrate è 
stata messa in atto proprio per spingere gli sviluppatori a muoversi in 
questa direzione, ma da sola non basta. In generale la regola d'oro è
*Non usare mai dati immessi dall'utente direttamente come componenti di 
comandi e/o query senza averli sottoposti a controllo di congruenza*
E come controllo, non fidarsi del controllo client-side puro e semplice 
perchè troppo facilmente eludibile.
Concludo citando una frase di Rasmus Lerdorf risalente all'epoca di 
PHP/FI e del gran putiferio scatenato da una presunta falla di sicurezza 
denunciata all'epoca: "PHP è un'arma potente, con la quale bisogna stare 
attenti a non spararsi sui piedi"...
HTH
bye!
-- 
Fabrizio "Hermooz" Ermini

 contenuto. Sapete dirmi "quanto" mi sbaglio? ^_^
Hai ragione. Nessuno. Hacker con fatica, ma questo non dipende dal sistema
ma dal sistemista e/o dal programmatore.
uno script semplice per caricare documenti vari:
<?php
readfile($_REQUEST['page']);
?>
funziona per caricare le pagine, ad esempio:
    index.php?page=indici.html
ma potrebbe anche funzionare con
    index.php?page=/etc/passwd

 perchč troppo facilmente eludibile.
Controllo client-side? Con Php? In che senso?
L.C.
^^^

 Controllo client-side? Con Php? In che senso?
Nel senso che se anche metti in un form HTML un campo di input con 
maxsize=32, non è detto che ti arrivi davvero un campo di massimo 32 
caratteri, ad esempio. Anche controlli in javascript sono molto comuni 
nelle applicazioni web-based (classico quello sui campi che non devono 
essere vuoti prima del submit, hai presente?); hanno una loro ragione di 
esistere dal punto di vista dell'usabilità, ma non sono da considerare 
dal punto di vista della sicurezza: se da un form ti arrivano dei dati 
con i quali costruire una insert su una tabella con foreign key, per 
continuare con gli esempi, anche se nel form questi dati li metti come 
selezionabili da una drop down list (e quindi in teoria non dovresti mai 
avere errori di inserimento per chiave non presente), è bene mettere un 
controllo comunque, non fosse altro perchè se ti arriva un dato che non 
è nella drop down vuol dire che c'e' qualcosa che non funziona come deve...
Certo, tenere conto di tutti questi controlli aggiuntivi costa in 
termini di impiego di risorse e tante volte si è costretti a rinunciare 
a qualcosa per ristrettezze di budget. L'importante è esserne sempre 
consapevoli...
HTH, bye!
-- 
Fabrizio "Hermooz" Ermini

<snip>
Accidenti che bel thread ne è uscito fuori! ^__^
Grazie a chi mi ha risposto qui e grazie a chi mi ha risposto circa
l'exit(). Davvero gentili, un bacione a tutti, a presto
-- 
Nicoletta

ne controllo la congruenza?
Proprio alle brutte, un "nome" e' una serie di lettere dell'alfabeto
piu' lo spazio, le accentate e i tre possibili apici (che converto a
un unico apice, prima di aggiungere lo slash), e forse il punto.
Cognome, uguale. Indirizzo ha in piu' i numeri, la virgola e "/".
Una roba del tipo
	NOME="Mario'; DELETE * FROM tabella;"
o
	NOME="Mario; <? phpinfo(); ?>"
non passa.
Leonardo