Newsgroup: it.comp.www.php
Titolo: Un chiarimento ad un novizio

Ciao a tutti. Sono nuovo in PHP e avrei una curiosità. Ho trovato sul web il seguente
script per proteggere una pagina con username e password, ma l'autore dello script
dice che questo non è un metodo sicuro e che, volendo, sarebbe comunque possibile
violare. 
Qualcuno mi sa dire il perché?
Grazie
--------------------------------------------
<html> 
<head> 
<title>Log in</title> 
</head> 
<body><center> 
Welcome to login area, please login with your username and pasword.<p></center>
<form method=post action = <?php print("$PHP_SELF"); ?>> 
  <div align="center"><b>Username</b>: 
    <input type="text" size=15 name="user"> 
    <b>Pass</b>: 
    <input type="password" size="15" name="pass"> 
    <input type="SUBMIT" name="send" value="Enter"> 
  </div> 
</FORM> 
<p> 
<?php 
if ($user  == "user" && $pass == "pass { 
include ("filename.txt"); //your html txt file with full path goes in here! 
}                          //or you can put your html in here. 
else 
{ 
if ($user == NULL) 
{ 
} 
else 
print ("Sorry, <b><i>$user</i></b> is not a correct username.");//this is the error
message, you can change it if you want. 
} 
?> 
<p> 
<center> 
</body> 
</html> 
--
Enjoy the .NET community! ASPItalia.com
 
http://forum.aspitalia.com/
 
http://www.aspitalia.com/

 else
Richiamando direttamente il file "filename.txt".
Ludovico

Qualcuno mi sa dire il perché?
A parte l'errore di sintassi dopo =="pass, ci sono due problemi:
1. Se per qualsiasi motivo lo script viene letto, chiunque scopre user e
   password.
   Per ovviare si puo' usare una pagina temporanea md5.php:
	<?
		// Nessun controllo, questo e' uno script ausiliario
		print md5($_REQUEST['string']);
	?>
   La lanci due volte con ?string=TUOUSER e poi ?string=TUAPASS e quella
   ti ritorna l'hash crittografico di TUOUSER e TUAPASS.
   A questo punto il controllo cambia da
	($user == 'TUOUSER')
   a
	(md5($_REQUEST['user']) == 'HASHDITUOUSER')
   ...e, se qualcuno legge lo script, scopre HASHDITUOUSER, col quale al
   massimo ci puo' fare il brodo (e verra' un brodino leggero, anche).
2. Se, sempre per qualsiasi motivo, uno scopre 'filename.txt', riesce ad
   aggirare tutta la protezione.
   Crea una directory "protected" e il file mettilo li', insieme (se usi
   Apache) ad un .htaccess che vieta l'accesso a protected; oppure metti
   la directory completamente fuori dell'albero Web (non in /inetpub, se
   usi IIS, per capirci).
   A quel punto,
		include "C:\\PROTECTED\\" . 'filename.txt';
   funziona, ma se chiedi al server "filename.txt" ti risponde "puppa!".
(Nel caso ti venisse in mente di rendere parametrico il filename, cioe',
per dire, getprotected.php?user=PIPPO&pass=PLUTO&file=miofile.txt, tieni
presente che e' bene ripulire $_REQUEST['file'] e assicurarsi che non si
possa - neanche avendo user e pass - chiedere, che so, &file=/etc/passwd
(QUESTO esempio non servirebbe comunque a nulla (man shadow), ma un .php
che fornisce QUALSIASI FILE SUL DISCO e' una Brutta Cosa (TM)).
Leonardo alla rinfusa
-- 
Avere studiato senza mettere in pratica e' inutile;
mettere in pratica senza avere studiato e' pericoloso.
                                                - Conphpucio