Sicurezza login $_SESSION attacchi XSS CSRF

voldemort

Utente Attivo
26 Mar 2009
171
5
0
Eccomi finalmente ad un punto criciale del mio programma, LA SICUREZZA...
Come molte guide dicono "non fidarsi mai degli input" sto leggendo molte cose al riguardo di attacchi XSS e CSRF e volevo riscrivere la struttura del mio login per evitare noie visto che le visite stanno aumentando vorrei proteggermi prima che accada qualcosa, e poi appena possibile, passo tutto su un cloud e integrerò la crittografia SSL per stare leggermente più tranquillo :-D

Veniamo a noi, attualemente la struttura della mio login è la seguente :

la mia ACTION chiama una funzione pubblica e poi dalla pubblica chiamo una funzione privata in modo da evitare l'accesso diretto alla funzione che che crea la mia sessione, ovviamente per togliere eventuali script dagli input la mia username e password viene pulita grazie a strip_tags "Eliminando cosi la possibilità di eseguire un'attacco XSS"
Codice:
	public function login()
    {
            if(isset($_POST['submit'])){
              $username = strip_tags($_POST['username']);
              $password = strip_tags($_POST['password']);
                $this->valida_accesso($username, $password);               
            }else{                
                header('location:'. base_url());//errore login o hack
            }
    }

private function valida_accesso($username=null,$password=null){ 
            
            if(($username !="") && ($password != "")){
                $password_criptata = md5($password);                
                $this->load->model('account_model');                
                $riga_account=$this->account_model->verifica_login($username, $password_criptata); 
                
                
                if(count($riga_account)>0){
                    //prelevare livello
                    $this->load->model('dati_account_model');
                    $dati_account=$this->dati_account_model->cerca_da_id_account($riga_account->id);
                   
                    
                    //caso verificato  
                    if($username==$riga_account->username){
                        if((($dati_account->livello >= "1") || ($dati_account->livello <= "4"))&&($riga_account->abilitato == "0")){
                        session_start();

                        $_SESSION['username'] = $riga_account->username;
                        $_SESSION['password'] = $riga_account->password;
                        $_SESSION['id'] = $riga_account->id;
                        $_SESSION['livello'] = $dati_account->livello;
                        $_SESSION['nome'] = $dati_account->nome;
                        $_SESSION['cognome'] = $dati_account->cognome;
                        
                        
                        if($dati_account->livello ==4){
                            $_SESSION['super_admin']=true;
                        }
                        switch($_SESSION['livello']){
                            case "4":
                                header('location:'.base_url().'super_admin/index');
                            break;
                            case "3":                                
                                header('location:'.base_url().'admin');
                            break;    
                        }

                        }else{//permesso negato
                           $type= "alert alert-danger";
                        $messaggio = "<center><b>Permesso Negato</b></center><br /> Verrai rendirizzato alla HOME fra breve";
                        $url = "";
                        $this->user_model->messaggio_admin($type,$messaggio,$url);  
                        }
                    }else{
                        $type= "alert alert-danger";
                        $messaggio = "<center><b>Errore Dati inseriti</b></center><br /> Verrai rendirizzato alla HOME fra breve";
                        $url = "";
                        $this->user_model->messaggio_admin($type,$messaggio,$url);
                    }
Ora per proteggermi da un'attacco CSRF ho capito come generare un codice tocken :
Codice:
$old_sessionid = session_id();

session_regenerate_id();

$new_sessionid = session_id();

echo "Old Session: $old_sessionid<br />";
echo "New Session: $new_sessionid<br />";
ma come posso usarlo ???
 

Discussioni simili