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"
Ora per proteggermi da un'attacco CSRF ho capito come generare un codice tocken :
ma come posso usarlo ???
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);
}
Codice:
$old_sessionid = session_id();
session_regenerate_id();
$new_sessionid = session_id();
echo "Old Session: $old_sessionid<br />";
echo "New Session: $new_sessionid<br />";