SELECT livello_auth FROM utenti WHERE username = '{$_POST[username]}' and pwd = '{$_POST[password]}' LIMIT 1",
io non sono sufficientemente bravo per giudicare... ma a me sembra una query da pazzi questa.
Io, per quel che ho imparato/letto/capito si dovrebbe fare almeno l'addslashes alle variabili post (ovviamente inserite nel db dopo il filtro con addslashes) ed possibilmente anche un trim() per eliminare gli spazi.
Inoltre se, eventualmente, si vuole evitare il case sensitive (distinzione fra maiuscole e minuscole) bisognerebbe ulteriormente filtrare le variabili post con strtolower ()
Vi posto il mio piccolo lavoretto sperando possiate contribuire a giudicarlo...
1)pagina login.php (cioè il form... in questa versione semplificata ho rimosso il javascript che mi verifica i campi vuoti)
Codice PHP:
<html>
<head>
<title>pagina di login</title>
</head>
<form name=accedi action=verifica.php method=post>
<table>
<tr>
<td>
nome</p></td><td><input type=text name=username></td>
</tr>
<tr>
<td>
password</p></td><td><input type=password name=pass></td>
</tr>
<tr>
<td></td><td><input type=submit value=accedi> <input type=reset value=cancella></td>
</tr>
</table>
</form>
</body>
</html>
la pagina verifica.php che a seconda del risultato reindirizza di nuovo al login o alla pagina protetta.
Codice PHP:
<?php
session_start();
/**RICEZIONE CREDENZIALI DI ACCESSO**/
if( (isset($_POST['username'])) && (!empty($_POST['username'])) )
{
$username=addslashes(strtolower(trim($_POST['username'])));
}
else {header("location: login.php");exit();}
if( (isset($_POST['pass'])) && (!empty($_POST['pass'])) )
{
$pass=addslashes(strtolower(trim($_POST['pass'])));
}
else {header("location: login.php");exit();}
$db_host = "localhost";
$db_user = "root";
$db_password = "";
$db_database = "nome_db";
$db_tabella = "utenti";
$connessione = mysql_connect($db_host,$db_user,$db_password);
mysql_select_db($db_database,$connessione);
$sql= "select id_utenti from ".$db_tabella." where nome='".$username."' and pass='".$pass."'";
$query=mysql_db_query($db_database,$sql,$connessione);
$num=mysql_num_rows($query);
if($num>0) {
$_SESSION['utente']="utente";
header("location: protetta.php");
}
else {header("location: login.php");}
?>
protetta.php (e i successivi link anche essi protetti inizieranno sempre con questo script php)
Codice PHP:
<?php
session_start();
if( (!isset($_SESSION['utente'])) || ($_SESSION['utente']!="utente") )
{
header("location: login.php");
exit();
}
?>
<html>
<body>
<h1>pagina protetta</h1>
</body>
</html>
Sono ben accette tutte le correzioni!!