area protetta

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.044
150
63
PR
www.borgo-italia.it
ciao
in un testo ho trovato questo script relativo alla creazione di un’area protetta.
è un testo in cui l’autore presuppone che tutti sappiano tutto di tutto (ahime) e quindi non spiega nulla.
Lo scripi è questo:
PHP:
<?php
if(!(isset($_SERVER['PHP_AUTH_USER']) &&
	isset($_SERVER['PHP_AUTH_PW']) &&
	$_SERVER['PHP_AUTH_USER'] =='nome' &&
	$_SERVER['PHP_AUTH_PW'] =='pass')){
	header('WWW-Authenticate: Basic realm="Area Protetta" ');
	header('Status: 401 Unauthorized');
}else{
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>pagina protetta</title>
</head>
<body>
sei entrato<br>tutto quello che serve
</body>
</html>
<?php
}
?>
ora, chiamando la pagina il bw dovrebbe chiedere l’username e la password (così almeno dice) come da figura seguente:
password.jpg


a me, invece, da pagina bianca.
qualcuno sa dirmi dove io (o l’autore) sbaglio?
 
Mi sembra abbastanza disordinato e mal concepito, ti propongo di usare questo in cambio. Posto anche il codice per comodità:
PHP:
$autenticato = false;
if (isset($_SERVER['PHP_AUTH_USER']) && 
    isset($_SERVER['PHP_AUTH_PW']))
  {

  $user = $_SERVER['PHP_AUTH_USER'];
  $password = $_SERVER['PHP_AUTH_PW'];
  
if ($user == 'marlon' && $password == 'brando'){
  $autenticato = true;
  }
 }
if (!$autenticato){
  header('WWW-Authenticate: Basic realm="Pagina di accesso"');
  header('HTTP/1.0 401 Unauthorized');
  echo "Autenticazione fallita.\n";
}
  else {
  echo 'Utente autenticato.';
  }
 
ciao elix, una domanda

mi sai dire quale è il grado di sicurezza di un tale sistema? cioè è (facilmente) possibile inviare una pass o user con una injection? non c'è bisogno di "filtrarle"?
grazie
 
Ciao,

mi permetto di inseririrmi. Il livello di sicurezza dello script proposto è medio\basso, l'http basic autentication, infatti, non è un protocollo sicuro per i seguenti motivi:
User & password sono inviati in base64 ENCODING (non encrypted), il server di destinazione non è autenticato\verificato (possibilità di sniffing).
Inoltre, per lo script suddetto user e password sono in chiaro nel file..

Un protezione addizionale può essere ottenuta utilizzo un protocollo più sicuro (es. HTTPS) o migliorando la sicurezza a livello di network (IPSEC o VPN) ma per il tuo caso specifico credo che gli utlimi due non siano fruibili.

In definitiva, la sicurezza, dipende dalle finalità, dai dati in perimetro e funzionalità correlate, per una semplice area privata di un sito personale credo che vada bene..

Ciao, Ciro
 
Apache ha introdotto dei moduli con standard di sicurezza molto più elevati del modulo auth_basic ma che per lo più non vengono usati per motivi vari e spesso legati all'ignoranza di chi installa un web server, altre volte per l'uso, specie in pannelli di controllo precostituiti, di programmi di installazione già pronti che poco o nulla lasciano all'utente finale per poter modificare i moduli da caricare.
Per esempio cPanel usa EasyApache che permette di caricare in modo predefinito (perché Apache lo fa in questo modo) solo mod_authn_default, man on ad esempio mod_authz_user. che è più sicuro rispetto al modulo base.
Più ovviamente altri moduli basati su database DBM (sich!)
Il problema principale poi al solito ricade nella macchina che di solito sta tra la sedia e il monitor :) e non mi riferisco questa volta all'utente medio ma al programmatore.
Una macchina con installato il sistema operativo gnu/linux e sistema di shadow password è sufficientemente sicuro per un uso normale ma solo se chi lo usa ha l'accortezza di:
1)
a) dalla parte dell'amministratore di sistema di non usare la classica directory di default per le password ma di cambiargli il percorso con un nome di fantasia proprio.
b) di non permettere la lettura online, magari attraverso Google dei file .htaccess presenti nelle varie cartelle dei siti. Cosa che Apache non permette in modo predefinito ma che con una ricerchina per argomento su Google è facile rendersi conto di quanti server invece permettono!
2) dalla parte di chi programma il sito di evitare di mettere il classico file .htpasswd dentro la cartella da proteggere o al limite all'interno della root del sito, ma al di fuori di essa, magari chiamando l'amministratore di sistema e chiedendogli cosa e come fare.
2.1) spesso ci si affida a tool automatici per creare queste direcotry cosidette protette, è anche il caso di cPanel, diffidate!
Meglio fare le cose a manetta. Ma non aspettatevi la sicurezza di altri metodi basati su autenticazione asincrona.
Ah dimenticavo! Non è che sistemi a database siano più sicuri, sono sicuri almeno quanto questo metodo, anzi spesso molto ma molto di meno se fatti come quelli che vedo spesso in questo forum.
Sia chiaro non voglio criticare nessuno, ma spesso vedo passare direttamente ad una query il valore di una get senza nemmeno curarsi di controllare cosa contiene :)
 

Discussioni simili