Newsgroup: it.comp.www.php
Titolo: Autenticazione con IP

Il server dove mi appoggio "COBALT" non gestisce apache cosi' sono
cotretto a farlo in php.
Qualcuno mi dai una mano?
Questo e' uno script che ho scritto.
 
<?
 
$listIP="listIP.txt";                   //file con ip consentiti
$open=fopen("listIP.txt","r");          //apri il file listIP
$read=fread($open,filesize($listIP));   //leggi il file listIP
$userIP = getenv("REMOTE_ADDR");        //chiedi IP
 
if ($userIP != $listIP)                 //confronta se IP è nel file
{echo "Non sei autorizzato";}
else
{echo "Benvenuto";}
 
?>
Questo e' quello che ho saputo fare.
In pratica esistera' un file "listIP.txt" dove ci saranno 2-4-6 o non
so indirizzi IP che posso entrare.
Il formato del file  sara':
192.168.1.20
62.52.45.86
165.167.12.162
ecc.
ecc.
ecc.
 
Volendo rimandarlo ad una pagina html come posso fare 
 
echo "http:\\
www.pincopallino.it
\pincopannilo\accessonegato.html
else
echo "http:\\
www.pincopallino.it
\pincopannilo\benvenuto.html
Ciao e grazie

$userIP = getenv("REMOTE_ADDR");        //chiedi IP
Qui avresti dovuto scrivere, se mai:
	$listIP = file('listIP.txt');	// Legge file in un array
	if (!isset($listIP[$userIP]))
	{
		... non aut.
	}
 
ma tieni conto che file() mette nell'array anche i fine-riga, che
possono essere "\n" o "\r\n". Quindi devi fare tre confronti.
Il tuo script non va perche' confronti l'indirizzo con il NOME di
quel file, non con il suo CONTENUTO.
Leonardo

 
Ok volendo proteggere anche con password?
Serve per poter evitare di scaricare file che non sono pagine html
protette con <? require_once 'ipallow.php'; ?>
Ciao e grazie

protette con <? require_once 'ipallow.php'; ?>
Non ho mica capito cos'e' che vuoi fare. E' chiaro che puoi proteggere
solo files PHP usando PHP.
Gli altri, o usi htaccess (che protegge anche PHP), oppure nascondi il
loro contenuto e lo passi usando un "gateway" PHP protetto.
Leonardo
-- 
Time's angles, mages tell, conceal a place
incredible, beyond the mundane mind;
night-shrouded and between the seas of space
dread creatures drift in the ageless winds.

Ho uno spazio su web e vorrei fare in modo che 3-5 o
10 sedi remote o client si connettono ,tramite ADSL con indirizzo IP
statico,a questo spazio dove ci sono degli aggiornameti di un DB e 
dei file tipo lettere da proteggere.
Il gestore dovrebbe avere la possibilita' di entrare anche con Login e
Password perche' non stando in ufficio potrebbe connettersi da un pop qualsiasi.
Ciao e grazie Aldo



Ah, be'. Allora si puo' modificare cosi'. La sicurezza e' quella che e',
senza SSL viaggia tutto in chiaro.
	...
	if (!isset($ALLOWED[$adr]))
	{
		$users = array
		(
			'9aa792ce63e663e643ac92e4f514be6e' => 20,
		);
		$need_pass = 1;
		if (isset($PHP_AUTH_USER))
		if (isset($PHP_AUTH_PW))
		{
			$CR=md5crypt($PHP_AUTH_PW.$PHP_AUTH_USER);
			if (array_key_exists($users, $CR))
				$need_pass = 0;
			$PHP_AUTH_LEVEL = $users[$CR];
		}
		if ($need_pass)
		{
			Header("WWW-Authenticate: Basic
realm=\"Documenti\"");
			Header("HTTP/1.0 401 Unauthorized");
			print <<< UNAUTHORIZED
<HTML><HEAD><TITLE>401 Accesso Negato</TITLE></HEAD>
<BODY>
$CR not valid.
</BODY>
</HTML>
UNAUTHORIZED;
			exit;
		}
	}
	unset($users);
	unset($need_pass);
	unset($ALLOWED);
?>
Quando accedi con un utente e password arbitrari, ti risponderą per
esempio "0ff5c9aed0df06fbf04bd364a93fb0f3 not valid". A quel punto,
ti basta inserire 0ff5c9aed0df06fbf04bd364a93fb0f3 in $users.
Dopo, le variabili $PHP_AUTH_USER e $PHP_AUTH_LEVEL ti dicono quale
utente e' connesso e che livello di accesso ha.
E, se uno riesce a leggere il file ipaccess.php, per qualche magia,
il file gli serve a poco perche' users e passwords in chiaro dentro
non ci sono.
Leonardo

Per il momento grazie se ho problemi ti faccio sapere.
Ciao Aldo

Non mi funziona .
Questo sarebbe l'intero script?
Ciao e grazie
<?
 	// Questo e' il file degli IP consentiti,
 	// ipallow.php
 	$ALLOWED = array(
 	'127.0.0.1',
 	'192.168.1.15',
 	);
 	$adr = getenv('REMOTE_ADDR');
 	if (!isset($ALLOWED[$adr]))
 	{
 		Header('Location: 
http://www.sito.it/negato.html'
);
 		exit();
 	}


Non mi funziona .
Non so che farci :-)
--- 
Seriamente, se mi dici _in che modo_ non funziona, posso metterci mano.
Come prima riga aggiungi:
	error_reporting(E_ALL);
Cosi' a occhio potrebbe mancare il modulo MD5.
Leonardo

OK riprendiamo.
Con lo script non riesce a gestire l'autenticazione con l'indirizzo IP.
Vi ripeto che la macchina mostruosa e' un COBALT.
Ciao e grazie

Con lo script non riesce a gestire l'autenticazione con l'indirizzo IP.
che_cosa_significa.
Ci possono essere seicento e quaranta ragioni per cui l'autenticazione
non ti funziona, e dugento e trentuna perche' tu CREDI che sia quello,
il problema, e invece e' un altro.
Mi e' *indispensabile*, almeno, l'errore che compare quando la *PRIMA*
riga della pagina HTML/PHP e' questa
<? error_reporting(E_ALL); ?>
Non la prima riga del codice PHP e non la prima riga di qualcos'altro,
ma proprio la prima riga del file cosi' com'e' su disco, prima di ogni
altro include, require, CSS, javascript e cosi' via.
O altrimenti tanto vale che tu mi chieda di risponderti tenendo spento
il monitor e la tastiera staccata.
OK, mi calmo :-)
La butto li': ti sei reso conto che quello e' solo un PEZZO di script,
e almeno almeno gli devi definire il vettore degli IP permessi?
Leonardo

Questo e' index
<? error_reporting(E_ALL); ?>
<HTML><HEAD><TITLE>Prova</TITLE>
<META content="text/html; charset=windows-1252"
http-equiv=Content-Type>
<META content="MSHTML 5.00.3315.2870" name=GENERATOR></HEAD>
<P align=center>&nbsp;</P>
<P align=center><IMG height=280 src="1.gif" width=168></P>
Questo e' lo script
<?
 	// Questo e' il file degli IP consentiti,
 	// ipallow.php
 	$ALLOWED = array(
 	'162.94.3.216',
 	);
 	$adr = getenv('REMOTE_ADDR');
 	if (!isset($ALLOWED[$adr]))
 	{Header('Location: 
http://www.tin.it
');
 		exit();
 	}
?>
Sappi che ho 2 computer connessi ad internet con due modem differenti
:1 con ftp e con un un indirizzo ip e l' altro con un altro indirizzo
ip.
L'indirzzo ip si controlla da prompt di DOS con ipconfig.
Ha dimenticavo con questi script compare sempre la pagina di sopra.
Ti ricordo che questo "MOSTRO" di server e' un COBALT.
Ciao e grazie

Ha dimenticavo con questi script compare sempre la pagina di sopra.
Cioe'... con dentro il codice PHP non interpretato?
Allora bisogna dire (come, non so) al server che deve interpretare il PHP.
Non e' un guaio del PHP: e' un problema del maledetto server. Non so quale
newsgroup sia piu' indicato per la risoluzione, pero'.
Prova a salvare la pagina chiamandola "prova.php3" anziche' "prova.php".
Se cosi' funziona (o almeno scompare il codice PHP), l'admin del server si
e' dimenticato di aggiungere l'estensione ".php" al default ".php3".
Leonardo cui e' successo


Forse ho trovato la soluzione.
CAMBIO SERVER.........................................................................................................
Inoltre passo al htacces.
Ciao e grazie