Posto che sono niubbissimo per PHP...
1) la sessione inizializzala subito
poi...
Codice PHP:
$user = $_POST['user'];//user da cercare
$password = (string) $_POST['password'];//password dell'user da cercare
$captchaform = $_POST['captcha'];//captcha che arriva dal form da confrontare
$iscriveme = isset($_POST['iscriveme']) ? "si" : "no";//richiesta iscrizione
io verificherei se le variabili esistino, se sono vuote, e soprattutto metterei un limite sulla lunghezza,
per evitare che ti piazzino qualche XSS dentro
Codice PHP:
session_start();// inizio la session
Credo (non son sicurissimo) che vada all'inizio
Codice PHP:
$captchaphp = $_SESSION["code"]; //leggo valore captcha elaborato da captcha.php
Ti "fidi" del valore, io invece controllerei che sia giusto, altrimenti se "qualcuno" ti cambia la variabile di sessione te la prendi così
Codice PHP:
echo $user ."\n". $password ."\n".$captchaform ."\n".$captchaphp ."\n".$iscriveme."\n";
//exit();
Mai e poi mai scrivere a video i dati delle variabili (XSS)
Codice PHP:
$_SESSION["user"] = $_POST['name'];//setto la variabile di sessione user
$_SESSION["password"] = $_POST['password'];//setto la variabile di sessione password
Stesso discorso, controllerei se son settati, vuoti e troppo lunghi
Personalmente non passo mai questi dati "lisci" (dalla pagina HTML), bensi invio l'SHA1 (con una libreria javascript).
Poi controllo lunghezza della stringa, e che sia composta solo da caratteri ASCII esadecimali.
Codice PHP:
if($captchaform == $captchaphp && $iscriveme == "no"){ //captcha giusto niente iscrizione
echo "ciao";
Mi sa che ci vuole === e non ==
Codice PHP:
$database = new Database();
$database->query('SELECT * FROM utenti WHERE user = :user');
$database->bind(':user', $user);
Metteri un LIMIT 1, poi toglierei * a favore dell'elenco dei campi che ti serve.
E, già che ci sono, come detto non userei un confronto diretto bensì = degli SHA1 (funzione che in mysql c'è)
Codice PHP:
//$database->bind('assword', $password);
QUi avrei messo un CATCH per intercettare una eccezione (es. database non disponibile e così via)
Codice PHP:
$rows = $database->resultset();
echo $database->rowCount();
Qui controllerei il numero delle righe (con LIMIT 1 devono essere 1 e non zero)
Codice PHP:
$_SESSION['cognome']=$row[3];
echo "cognome".$row[3];
$_SESSION['nome']=$row[4];
$_SESSION['livello']=$row[5];
$_SESSION['autorizzato']=0;
Qui sei a rischio perchè se i campi non ci sono (cioè $row non è così lunga) avresti degli errori