2010-05-04 4 views
0

comment se faire le code avant piraté avec injection SQL :(CodeIgniter login admin piraté bien que je l'ai utilisé toutes les questions de sécurité

$query = $this->db->query("SELECT * FROM users WHERE username = ? AND password = ?", array(mysql_real_escape_string($this->input->post('username')), mysql_real_escape_string(MD5($this->input->post('password'))))); 

apprécier aide !!

+1

Bonjour, Codeigniter fait de son mieux pour offrir de meilleures fonctionnalités. Le principal problème avec les développeurs est qu'ils pensent que les utilisateurs sont dignes de confiance. Codeigniter donnant un tel mécanisme, vous devez vérifier ce que fait l'utilisateur. Donner une meilleure validation par les données, Vous pouvez utiliser la classe Active Record pour de meilleures requêtes, mais vous devez tout valider. – Red

Répondre

2

Vous n'avez pas besoin d'utiliser mysql_real_escape_string (.) comme CodeIgniter pilote de base de données fait pour vous échapper à votre double chaîne pourrait bien causer quelques problèmes

+0

J'ai eu le même problème de piratage quand je n'ai pas mysql_real_escape_string(), et on m'a suggéré de l'utiliser. J'ai ajouté MD5 au mot de passe, mais j'ai de nouveau été piraté :( –

+0

"got hacked" n'est pas très descriptif, vous êtes tout à fait sûr que c'était SQL Injection, car il est très difficile de se faufiler dans la classe des pilotes. Il se peut qu'il y ait plusieurs autres façons de pirater votre système, mais nous ne pouvons pas dire simplement à partir de ce code: –

+0

En effet, cela aurait pu être n'importe quoi - laisser le compte admin avec un mot de passe par défaut? l'hyperviseur est-il compromis? (C'est un peu exagéré, j'avoue). – Piskvor

-1

Utilisez comme ceci pour des requêtes plus sûres.

$query_username = $this->db->query("SELECT COUNT(username) AS count_username FROM users WHERE username=?", $this->input->post('username')); 
$row_username = $query_username->row_array(); 
if ($row_username['count_username'] > 0) { 
    $query_password = $this->db->query("SELECT password FROM users WHERE username=?", $this->input->post('username')); 
    $row_password = $query_password->row_array(); 
    if ($row_password['password'] == MD5($this->input->post('password')) { 
    // LOGIN SUCCESS 
    } else { 
    // LOGIN FAILED 
    } 
} else { 
    // LOGIN FAILED 
} 
Questions connexes