Newsgroup: it.comp.www.php
Titolo: PhPNuke 5.6 - Sicurezza

Ragazzi c'č qualche anima buona che spiega passo passo come proteggre il
proprio portale da intrisioni? Si ho capito che bisogna criptare la password
dell'amministratore ma come? Con parole semplici adatte anche a chi come me
č abbastanza "acerbo" della manipolazione dei files di php.
Grazie 1000 per tutto
Mimmo

 
Le password sono già cryptate.
Ecco un pezzo di una cosuccia che ho scritto sul manuale PHPnuke, ti 
consiglio di scaricarlo è gratis. (poi cambia il files reply.php nel 
modulo modules/Private_Messages/Your Account con la patch che c'é in giro)
Se qualcuno volesse correggere o aggiungere qualcosa al documento 
sarebbe il benvenuto!
[Libro mode ON]
PHPNUke fa molto uso dei cookies sia per autenticare gli user che per 
autenticare gli admin. I cookies sono dei file di testo archiviati sul 
nostro computer che contengono diverse informazioni che vengono 
richiamate quando si entra in un certo sito. Nel caso di PHPNUke le 
informazioni sono relative all'utente, al tema scelto, alla lingua 
utilizzata.
Il cookie è quello strumento che ci consente anche di non dover 
ridigitare la password loggandoci ogni volta. In questo modo ogni volta 
che accediamo ad un portale PHPNUke il cookie lavora per noi gestendo le 
operazioni di login.
Il problema è uno solo, che se il cookie non ha un expiration time basso 
qualcuno può rubarcelo ed accedere come utente o come admin al portale. 
Questo è possibile per una serie di motivi:
1) Il cookie di PHPNUke ha una vita pressoché infinita (31536000 secondi)
2) Explorer (Browser più utilizzato, purtroppo) ha delle vulnerabilità 
che consentono di far eseguire al client script maliziosi che “rubano” 
il cookie all'utente inviandolo al “Ladro”.
3) PHPNUke non riesce a filtrare tutti gli script maliziosi (O per 
meglio dire, Explorer è talmente stupido che corregge script inseriti 
con una sintassi sbagliata per non essere riconosciuti).
Facciamo un esempio concreto di come uno script kiddie (colui che si 
crede hacker ma non lo è ...) possa cercare di ottenere i diritti di 
admin sul nostro portale:
1) Lo script kiddie inserisce uno script postando una finta news tipo
< vb script dammi il cookie e mandalo sul server xyz che non viene 
filtrato dalla funzione check_words() di PHPNuke
2) L'admin del phpnuke apre (Con explorer!!! Con Mozilla o meglio su 
linux questo hack non vale) la lista delle news da pubblicare, Explorer 
(stupido) coregge il vbscript in questo modo <vbscript> tutte le 
istruzioni riuscendo ad interpretare in modo corretto (!!) la sintassi 
errata, prendendo il cookie e spedendolo allo script kiddie
3) Lo script kiddie mette il cookie tra i suoi, si collega al sito e ... 
viene riconosciuto come admin!!!
Ma come è possibile proteggerci da questo tipo di hack?
Ci sono un insieme di soluzioni che dovrebbero aumentare di molto la 
sicurezza della nostra area di admin:
1) Innanzitutto smettere di usare Internet Explorer come browser e 
passare seduta stante a Mozilla (
www.mozilla.org
). Mozilla è un browser 
che supporta tutti i siti in modo ottimo e non è afflitto da tutte le 
vulnerabilità di casa Redmond. Ah! Se usate invece Linux non avete 
problemi di sorta ...
1b) Nel caso vogliate continuare ad usare Explorer almeno scaricatevi le 
patch da 
www.microsoft.com
2) Disabilitate, dove possibile, l'inserimento di tag HTML (Ad esempio 
nel forum di Splatt.it)
3) Accorciate la vita dei cookies, se ad esempio impostiamo la vita del 
cookie a due ore lo script kiddie dovrà per forza utilizzare il cookie 
entro quel periodo, questo limita di molto la sua possibilità di agire.
Se invece lasciamo la vita del cookie impostata come è adesso lo script 
kiddie potrà anche utilizzare il nostro cookie per 1 mese dopo che lo ha 
rubato ...
Come impostare la durata del cookie di admin? Il cookie viene impostato 
nel file includes/auth.php e la funzione da modificare è la seguente:
if ((isset($aid)) && (isset($pwd)) && ($op == "login")) {
     if($aid!="" AND $pwd!="") {
	$pwd = md5($pwd);
	$result=sql_query("select pwd, admlanguage from ".$prefix."_authors 
where aid='$aid'", $dbi);
	list($pass, $admlanguage)=sql_fetch_row($result, $dbi);
	if($pass == $pwd) {
	    $admin = base64_encode("$aid:$pwd:$admlanguage");
	    setcookie("admin","$admin",time()+7200);
	    unset($op);
	}
     }
}
Come vedete abbiamo modificato il tempo di vita del cookie da 2592000 
secondi (un mese) a 7200 secondi (due ore). Come è facile notare abbiamo 
ridotto il raggio di azione dello script kiddie da un mese a due ore.
3) E' in fase di studio un filtro di tag più efficace anche se per ora 
le soluzioni proposte non hanno dato una soluzione definitiva. I tag 
ammessi vengono definiti nel file config.php nella variabile 
$AllowableHTML, valgono per i commenti e per l'inserimento delle news 
nella funzione check_html() in quanto per ora lascia passare alcuni tags.
Tutte queste azioni e una giusta configurazione dei permessi come 
illustrato nel paragrafo precedente dovrebbero garantire una buona 
sicurezza del nostro portale. E' anche importante seguire i wari warning 
di sicurezzasu phpnuke che sono riportati su 
http://neworder.box.sk/
[Libro mode OFF]
-- 
www.claudioerba.com
 - Consulenza web per l'azienda
www.spaghettibrain.com
 - PHPNUke Italian Mirror (Da oggi anche Hosting!)
My ICQ: 14187053
--


Grazie per i chiarimenti ma sei sicuro che il file auth.php si trova dentro
includes? perchè a me sta fuori.
Ciao e grazie
Mimmo


no no è fuori ...
ho sbagliato
Cla
