Proteggere una pagina di un sito con password

Rikardinho90

Utente Attivo
16 Mar 2009
50
0
0
Salve a tutti. Ho creato una pagina di login in cui ogni utente che si vuole collegare alla pagina protetta da password deve inserie username e password da me forniti. Tutto funziona correttamente ma vorrei sapere se fosse possibile aggiungere un maggior numero di username e password in modo che ogni utente possa avere user e pass personali e non la stessa password per ogni utente. Il codice che utilizzo è questo:

<?php
//recupero user e pass dal form di login
$user = (isset($_GET['user'])) ? $_GET['user'] : '';
$pass = (isset($_GET['pass'])) ? $_GET['pass'] : '';

//verifico user e pass
if ((strcasecmp($user, 'pincopallino') == 0
&& strcmp($pass, '12345') == 0)
) {
echo 'Login effettuato.' ;
} else {
echo 'Login fallito.' ;
}
?>


L'user è pincopallino e la password è 12345. Ecco, io vorrei sapere se fosse possibile aggiungere un username e una password per ogni utente (da qualche parte ho letto che è possibile utilizzando un array che associa tutti gli user alle rispettive pass). Se qualcuno ha una soluzione ne sarei davvero grato, grazie.
 
Passa i dati con post e crea delle sessioni, così è parecchio insicuro
 
ciao,
a parte il get, se non vuoi usare un db, potresti fare così anche se gli iscritti sono molti è una pizza

PHP:
<?php
//crei array per pass e uno per user
$pass_l=array();
$usrn_l=array();
//metto dei nomi a caso
$pass_l['pinco']="123";
$usrn_l['pinco']="piripacchio";
$pass_l['pallino']="777";
$usrn_l['pallino']="abracadabra";
//...eccetera.......
//cosi vedi a chi attribuisci la pass e user
// potresti fare anche una pagina chiamata password_user.php
//dove metti le righe sopra
// e poi fai
//include_once "password_user.php";
//metti $_POST, anche nel method= del form ( method="post" )
$pass = (isset($_GET['pass'])) ? $_GET['pass'] : '';
$user = (isset($_GET['user'])) ? $_GET['user'] : '';

//e verifichi che le pass e user esistano nell'array

if (in_array($pass, $pass_l) && in_array($user, $usrn_l)){
	echo "puoi accedere";
	//eccetera....
}else{
	echo "accesso negato";
	//eccetera....
}
?>


p.s.
alex permettendo:D
 
ok grazie, adesso provo quest'ultimo tuo suggerimento. Tanto la pagina è riservata a una decina di utenti quindi alla fine il codice non si incasinerà troppo. Provo e ti faccio sapere se funziona
 
non ho capito l'associazione di user e pass

$pass_l['pinco']="123";
$usrn_l['pinco']="piripacchio";
$pass_l['pallino']="777";
$usrn_l['pallino']="abracadabra";


cioè se io come user metto pinco poi ke pass devo mettere?
 
dato che:
PHP:
$pass_l['pinco']="123";
$usrn_l['pinco']="piripacchio";

pinco avrà come username "piripacchio" e come password "123"
 
Borgo, magari dico una scemata, ma col tuo script uno non potrebbe entrare anche combinando usr e pass di utenti diversi?
 
Borgo, magari dico una scemata, ma col tuo script uno non potrebbe entrare anche combinando usr e pass di utenti diversi?

esattamente, vabbè ma tanto su 10 persone che avranno accesso al sito non penso ci siano così tante possibilità di andare a inserire l'esatta password di un altro
 
Aspetta, adesso creo una piccola classe che faccia quello che chiedi in maniera più efficiente di quella di borgo. Un attimo, eh...

EDIT: Eccola qui, completa di esempio.
PHP:
<?php
// codici di errore interni
define('ERR_EMPTY_USER', 1);
define('ERR_EMPTY_PASS', 2);
define('ERR_USER_EXISTS', 3);

// codici di errore login
define('ERR_NOT_EXISTS', 3);
define('ERR_BAD_PASSWD', 4);

// codice di successo
define('LOGIN_SUCCESS', 5);

// definizione classe
class phpLogin
{
	// [privata, con metodi di accesso] variabile dati utente
	private $users;
	
	// [pubblica] costruttore
	public function __construct()
	{
		// definisce correttamente il tipo
		$this->users = array();
	}
	
	// [pubblica] aggiunte un nuovo utente (username, password)
	public function addUser($username, $password)
	{
		// controlla la validità dello username
		if($username == '' || !is_string($username))
			return ERR_EMPTY_USER;
		// controlla la validità della password
		if($password == '' || !is_string($password))
			return ERR_EMPTY_PASS;
		// controlla che l'utente non esista
		if($this->userExists($username))
			return ERR_USER_EXISTS;
		
		// aggiunge l'utente alla variabile
		$this->users[$username] = $password;
	}
	
	// [privata] controlla che un utente esista (username)
	private function userExists($username)
	{
		// controlla che sia presente nell'array
		if(!in_array($username, array_keys($this->users)))
			return false;
		
		// restituisce true
		return true;
	}
	
	// [privata] controlla che username e password siano corretti (username, password)
	public function checkLogin($username, $password)
	{
		// controlla la validità dello username
		if($username == '' || !is_string($username))
			return ERR_EMPTY_USER;
		// controlla la validità della password
		if($password == '' || !is_string($password))
			return ERR_EMPTY_PASS;
		
		// controlla che l'utente esista
		if(!$this->userExists($username))
			return ERR_NOT_EXISTS;
		// controlla che la password sia corretta
		if($this->users[$username] != $password)
			return ERR_BAD_PASSWD;
		
		// restituisce il valore di successo
		return LOGIN_SUCCESS;
	}
}
?>
E qui invece l'esempio:
PHP:
<?php
// controllo che il form sia stato inviato
if(isset($_POST['submit']))
{
	// includo la classe
	require('phpLogin.php');
	
	// creo una nuova istanza della classe
	$phpLogin = new phpLogin();

	// aggiungo qualche utente
	$phpLogin->addUser('admin', 'admin');
	$phpLogin->addUser('pinco', 'pallino');
	$phpLogin->addUser('mario', 'rossi');
	
	// recupero i dati inseriti dall'utente
	$username = isset($_POST['username']) ? trim($_POST['username']) : '';
	$password = isset($_POST['password']) ? trim($_POST['password']) : '';

	// tento di loggare l'utente
	$exec = $phpLogin->checkLogin($username, $password);

	// controllo che username e password siano stati inseriti
	if($exec == ERR_EMPTY_USER)
		die('Non hai inserito uno username valido.');
	if($exec == ERR_EMPTY_PASS)
		die('Non hai inserito una password valida.');

	// controllo che l'utente inserito esista
	if($exec == ERR_NOT_EXISTS)
		die('L\'utente inserito non è esistente.');

	// controllo che la password sia corretta
	if($exec == ERR_BAD_PASSWD)
		die('La password inserita non è corretta.');

	// se il login è avvenuto visualizzo un messaggio di successo
	if($exec == LOGIN_SUCCESS)
		echo 'Login effettuato con successo!';
	// la condizione qui sotto probabilmente non si verificherà mai
	else
		echo 'Errore non definito durante il login.';
}
// altrimenti visualizzo il form
else
{
	// stampo il codice HTML del form
	echo <<<EOF
<html>
	<head>
		<title>Autenticazione con phpLogin</title>
	</head>
	<body>
		<h1>Autenticazione</h1>
		<form action="{$_SERVER['PHP_SELF']}" method="post">
			<label>Username:</label>
			<input type="text" name="username" /> <br /> <br />

			<label>Password:</label>
			<input type="password" name="password" /> <br /> <br />

			<input type="submit" name="submit" value="Login" />
			<input type="reset" name="reset" value="Reimposta" />
		</form>
	</body>
</html>
EOF;
}
?>
Tutto testato e funzionante. Alessandro 1 - Borgo 0 :D
 
Ultima modifica:
ciao
Borgo, magari dico una scemata, ma col tuo script uno non potrebbe entrare anche combinando usr e pass di utenti diversi?
no, è vero ma l'avevo fatto così di getto

quanto dici, anche se Rikardinho90 ha risolto, potrebbe essere risolto così

$utente[pinco]=array("123", "piripacchio");
e l'if
if (in_array($pass, $utente) && in_array($user, $utente)){
echo "puoi accedere";
//eccetera....
}else{

credo

p.s.
alex è il solito esagerato:D
 
Aiuto

?
include 'config.php';
$username=$_POST['username'];
$password=$_POST['password'];

if ($username==$usern && $password==$passd) {
?>

ragazzi perdonate l'ignoranza. Ho scaricato questo script e l'ho inserito come incipit di una pag.protetta.php.Non so dove devo inserire username e password ( es. username ... claudio). Ancora vorrei rendere infinite le passwor e username user1,2,3, etc come devo fare???
vi ringrazio anticipatamente.
 
grazie per la risposta

Ti ringrazio per la risposta.. ho letto la discussione. Ma per come ho impostato la mia protezione devo solo sapere dove inserire user e passw e come integrare il codice che ho postato per rendere le pass infinite..
ti ringrazio cmq.
 

Discussioni simili