Pagina 1 di 2

protezione pagine web

Inviato: dom 25 mar 2007, 17:05
da aLvArO
salve a tutti
vi spiego subito il mio prob dovuto alla mia ignoranza.
avrei bisogno di limitare l'accesso ad una pagina web di un sito personale.
solitamente restringevo l'accesso all'intera directory creando un file .htaccess.
considerato che questo sito viene caricato in uno spazio gratutito che nn mi permette di creare file .htaccess e quindi questo metodo di restrizione, esiste un metodo anche + semplice per fare in modo che ki clicca sul link che porta alla pagina che io voglio proteggere chieda l'inserimento di nome utente e pass
ciao grazie

Inviato: dom 25 mar 2007, 18:24
da albatros
Con php è relativamente facile, ma disponi dell'interprete php sul tuo spazio gratuito ?

Inviato: dom 25 mar 2007, 23:45
da aLvArO
non credo comunque nn conosco bene php le pagine sono scritte in html ho sentito che c'è qualke metodo di autenticazione anche con html comunque accetto qualsiasi tipo di consiglio tnx

Inviato: dom 25 mar 2007, 23:46
da ccts2002
sarei interessato anche io...come si fa con php?

grazie

Inviato: lun 26 mar 2007, 0:11
da albatros
Beh, crei un form in html dove chiedi di inserire nome e password, dopodiché calcoli l'md5 della password e lo confronti con quello che hai sul server, se coincidono stampi al volo la pagina con le istruzioni print altrimenti stampi un messaggio di errore...
Se gli utenti sono pochi e puoi scrivere uno per uno i confronti da fare, meglio, altrimenti tieni i dati in un database...
Ti conviene usare le sessioni, se credi puoi evitare di usare i cookies propagando il sessid tramite post (es. aggiungendo nel form una riga tipo: print('<input type="hidden" name="PHPSESSID" value="'.$PHPSESSID.'">'); ).

Brevi spezzoni di codice:

Per le sessioni scrivi un qualcosa tipo:

Codice: Seleziona tutto

session_start();
if(!IsSet($_POST['PHPSESSID']))
{
$PHPSESSID=session_id();
}
else
{
$PHPSESSID=session_id($_POST['PHPSESSID']);
}
Per il form qualcosa tipo:

Codice: Seleziona tutto

 print("<br>Inserire il nome utente:");
                          print("<br><form method=\"post\" action=\"{$_SERVER['P
HP_SELF']}\" > <input type=\"text\" name=\"utente\">");
                                  print("<br><br>Inserire la password:<br>");
                                  print("<input type=\"password\" name=\"passwor
d\"><br><br>");
                                  print("<input type=\"submit\" value=\"Invia\">
");
                                  print("</form><br>");
Per il controllo qualcosa tipo:

Codice: Seleziona tutto

function controllo($user,$passwd)
{
	if(($user=="geodesio"&&$passwd=="6e6bc4e49dd477ebc98ef4046c067b5f")||($user=="anassimene"&&$passwd=="0c88028bf3aa6a6a143ed846f2be1ea4"))
	{
		return TRUE;
	}
	else
	{
		return FALSE;
	}
Nel mio caso gli md5 li ho calcolati con:

Codice: Seleziona tutto

php -a
echo md5("password-di-accesso");
Ho detto che la procedura è relativamente semplice, ma non è veloce...
Se la sicurezza è poi importante occorre prestare una certa attenzione, in particolare occhio all'inserimento di codice malizioso tramite il form sfruttando le sequenze di escape, soprattutto se lo interfacci con un database (sql injection).

Inviato: lun 26 mar 2007, 8:26
da aschenaz
Io, in genere, utilizzo un altro metodo:
- innanzitutto non ricorro all'MD5, ma utilizzo una funzione di criptatura personalizzata e memorizzo la password su database come semplice campo di testo (che essendo criptato in modo originale, non è intelligibile con semplicità);

- poi, nel file di raccolta dati:

Codice: Seleziona tutto

// connessione mysql già aperta
$mypasswd=miaFunzioneCrypt($_POST["password"]);
$qry="SELECT * FROM utenti WHERE username='{$_POST["username"]}' AND password='$mypasswd'";
$res=mysql_query($qry);
if(!$res) {
      header("Location: index.php?backmsg=utente_non_autorizzato");
      exit();
}
$rws=mysql_fetch_object($res);
$_SESSION["user"]=$rws->username;
// etc.
Naturalmente, al funzione di criptatura dev'essere il più complicata possibile, associando diverse funzioni di modifica e conversione delle stringhe.

Per quanto riguarda l'sql injection, è fondamentale non settare a "on" il register_globals di php.ini.

Ciao,
nino

Inviato: lun 26 mar 2007, 9:02
da ccts2002
più o meno avevo fatto anch'io qualcosa del genere...
la cosa che mi interesserebbe è come avete risolto il problema del primo invio password...mi spiego:
una volta che si è confrontata la password, la si può ``rimandare'' da una pagina all'altra come hidden, come ha anche detto albatros
...
aggiungendo nel form una riga tipo: print('<input type="hidden" name="PHPSESSID" value="'.$PHPSESSID.'">')
...
ma la prima volta che l'utente si logga, la password viene trasmessa in chiaro, quindi chiunque stia sniffando, la può leggere tranquillamente...girando in internet avevo trovato uno script javascript che effettuando la conversione md5 (o qualsivoglia, basta scriverla!!!) sulla macchina client, invia la password già criptata...solo che necessita di avere java sul client, perdendo tutta la bellezza di avere un linguaggio lato server...
per la vostra esperienza, è solo paranoia o si può fare qualcosa?

ciao

P.S.: ovviamente tralasciamo il discorso se il sito merita o no tanta sicurezza...la mia è una curiosità di tipo ``cultura personale''...non si sa mai nella vita...

Inviato: lun 26 mar 2007, 9:42
da aschenaz
ccts2002 ha scritto:più o meno avevo fatto anch'io qualcosa del genere...
la cosa che mi interesserebbe è come avete risolto il problema del primo invio password...
CUT
ma la prima volta che l'utente si logga, la password viene trasmessa in chiaro, quindi chiunque stia sniffando, la può leggere tranquillamente...girando in internet avevo trovato uno script javascript che effettuando la conversione md5 (o qualsivoglia, basta scriverla!!!) sulla macchina client, invia la password già criptata...solo che necessita di avere java sul client, perdendo tutta la bellezza di avere un linguaggio lato server...
per la vostra esperienza, è solo paranoia o si può fare qualcosa?
..
Beh, volendo, si può ricorrere al protocollo https, ma, personalmente, non ho mai approfondito la materia, anche perché, coi pochi siti con cui ho avuto a che fare, non era il caso di eccedere in sicurezza... :roll:

Qui, comunque, c'è un tutorial.

Ciao,
nino

Inviato: lun 26 mar 2007, 10:04
da albatros
E' più che legittima la questione dell'invio della password in chiaro, personalmente non l'ho affrontata perché viaggia in chiaro anche la password di accesso al pannello del sito, quindi avrebbe poco senso, nel mio caso, inviare password crittate per accedere a sezioni particolari del sito dato che chi avesse sniffato la password principale potrebbe fare più o meno quello che vuole...

Inviato: lun 26 mar 2007, 10:22
da aschenaz
albatros ha scritto:E' più che legittima la questione dell'invio della password in chiaro, personalmente non l'ho affrontata perché viaggia in chiaro anche la password di accesso al pannello del sito, quindi avrebbe poco senso, nel mio caso, inviare password crittate per accedere a sezioni particolari del sito dato che chi avesse sniffato la password principale potrebbe fare più o meno quello che vuole...
Appunto per questo preferisco usare una funzione di criptatura personalizzata...

Inviato: lun 26 mar 2007, 12:01
da masalapianta
ninobi ha scritto:Io, in genere, utilizzo un altro metodo:
- innanzitutto non ricorro all'MD5, ma utilizzo una funzione di criptatura personalizzata
ritieni che il tuo algoritmo crittografico fatto in casa sia piu' robusto di md5?

Inviato: lun 26 mar 2007, 12:03
da masalapianta
ccts2002 ha scritto: ma la prima volta che l'utente si logga, la password viene trasmessa in chiaro, quindi chiunque stia sniffando, la può leggere tranquillamente...
per questo i login dovrebbero andare tutti sotto https

Inviato: lun 26 mar 2007, 12:27
da aschenaz
masalapianta ha scritto:
ninobi ha scritto:Io, in genere, utilizzo un altro metodo:
- innanzitutto non ricorro all'MD5, ma utilizzo una funzione di criptatura personalizzata
ritieni che il tuo algoritmo crittografico fatto in casa sia piu' robusto di md5?
:lol: Non sia mai!

Però, l'md5 è uno standard e ci arrivano tutti, ai miei percorsi tortuosi e demenziali ci si può arrivare lo stesso, ma non è altrettanto immediato...

Nel senso che, se uno riesce ad accedere al database e vede un campo password criptato, la prima cosa che prova è l'md5, no?

Inviato: lun 26 mar 2007, 12:39
da masalapianta
ninobi ha scritto:
masalapianta ha scritto:
ninobi ha scritto:Io, in genere, utilizzo un altro metodo:
- innanzitutto non ricorro all'MD5, ma utilizzo una funzione di criptatura personalizzata
ritieni che il tuo algoritmo crittografico fatto in casa sia piu' robusto di md5?
:lol: Non sia mai!

Però, l'md5 è uno standard e ci arrivano tutti, ai miei percorsi tortuosi e demenziali ci si può arrivare lo stesso, ma non è altrettanto immediato...

Nel senso che, se uno riesce ad accedere al database e vede un campo password criptato, la prima cosa che prova è l'md5, no?
ormai e' noto da anni che la security by obscurity non funziona, soprattutto in campo crittografico; la prima cosa che si impara studiando crittografia e' che la robustezza di un algoritmo NON deve dipendere dal fatto che sia noto o meno; ti garantisco che e' mooooooolto piu' semplice fare crittanalisi sul tuo algoritmo fatto in casa piuttosto che vedersela con md5 (nonostante md5 sia noto e il tuo algoritmo no)

Inviato: lun 26 mar 2007, 12:42
da aschenaz
masalapianta ha scritto:...
ormai e' noto da anni che la security by obscurity non funziona, soprattutto in campo crittografico; la prima cosa che si impara studiando crittografia e' che la robustezza di un algoritmo NON deve dipendere dal fatto che sia noto o meno; ti garantisco che e' mooooooolto piu' semplice fare crittanalisi sul tuo algoritmo fatto in casa piuttosto che vedersela con md5 (nonostante md5 sia noto e il tuo algoritmo no)
Ok, ne farò tesoro per il futuro.
Grazie 1000.