Ciao, dato che un po' di mesi fa avevo iniziato un sito che richiedeva un'area sicura, mi ero documentato un po' in giro... tra i vari script che ho trovato, ce n'era uno qui freephp.html.it seriamente bacato...
dovendo riscrivere interamente il sistema di login al sito ho pensato a una cosa estremamente semplice: "cosa devo fare?"
la risposta che ho avuto era semplice: "impedire a qualcuno di vedere delle cartelle che non deve vedere, e autenticare qualcuno in una sessione"
ecco quindi che mi è venuto in mente .htaccess, che viene gestito perfettamente da Apache.
il problema a questo punto era: "Come aggiornare il file .htpasswd dal php?"
Oppure "Si può dire ad apache di fare un autenticazione attraverso Mysql?"
Chiaramente si può fare tutto quanto, bisogna solo scegliere il metodo migliore...
I metodo, creare un file .htaccess nella directory da proteggere, più o meno così
Codice PHP:
AuthUserFile /home/sito/.htpasswd
AuthGroupFile /dev/null
AuthName "Directory Protetta. Powered by xgrafica.it"
AuthType Basic
<Limit GET>
require valid-user
</Limit>
eseguire una -System- dal php del tipo:
Codice PHP:
system('htpasswd -b '.$DOCUMENT_ROOT.'.htpasswd '.$usernamewebx.' '.$passwordweb.'');
(aggiungere -c se il file non esiste ancora)
controllare che apache controlli i file .htaccess (httpd.conf => AllowOverride All )
il gioco è fatto!
[come si aggiorna l'utente?]
stessa system, sarà linux ad accorgersi che il nome esiste già e quindi aggiornerà la password
Bene, adesso che il tizio è entrato come faccio a sapere suo username/id/email etc?
semplice
Codice PHP:
$usernameweb = $_SERVER['PHP_AUTH_USER'];
in un file di inclusione per TUTTI i file da proteggere, e poi si mette $usernameweb dentro a una query
WOW IT WORX!!!
II metodo
installare sul server questo modulo mod_auth_mysql
che in pratica controlla password e username invece che da .htpasswd, attraverso mysql!
inserire ora il file .htaccess nella root delle cartelle da proteggere
esempio:
Codice PHP:
AuthName "Login Required for this area. [email]info@miohost.it[/email]"
AuthType Basic
AuthGroupFile /dev/null
AuthMySQLHost miohost
AuthMySQLUser user
AuthMySQLDB database_autorizzati
AuthMySQLUserTable user_info
AuthMySQLScrambledPasswords On
require valid-user
ErrorDocument 404 /404.php
mettere una query del tipo sopraesposta,
includere per bene
controllare le conf di apache e...
WOW IT WORX
Ah ecco, dimenticavo i trucchi!!!
1) non riesco a uploadare i file che iniziano per .*
poco male, rinominalo in a.htaccess, e poi fai questa simpatica system
Codice PHP:
system('mv '.$DOCUMENT_ROOT.'/a.htaccess '.$DOCUMENT_ROOT.'/.htaccess')
e le limitazioni dell'hoster saltano
2) non riesco a scrivere nella cartella, poco male, esegui una system con il comando chmod prima e dopo il comando htpasswd!!!
3) l'hoster non mi installa il modulo
male, prova a usare l'altro.
4) uso l'altro ma apache non mi chiede di autenticarmi, e l'hoster non mi cambia httpd.conf
problemone. o lo convinci, oppure usi una system e speri in bene, a buon intenditore...
Pregi:
*estrema facilità nella gestione dei file da proteggere
*estrema facilità in inserimento/aggiornamento utenti
*ottima sicurezza (a patto che apache sia conf bene)
Difetti:
non me ne vengono in mente, ma qualcuno mi ha parlato di forte carico del server. io non ci credo.