2013-12-07 3 views
-1

Это мой код checklogin. Я не могу войти. Я думаю, что есть проблема с паролем. Я использую пароль md5. Правильно ли использовать md5, как показано ниже? Потому что счетчик $ продолжает показывать 0 не 1.Ошибка пароля для пароля md5

<?php 
require 'database.php'; 

//function to sanitize values from the form. Preventing the SQL injection 
function clean ($str){ 
    $str = @trim($str); 
    if (get_magic_quotes_gpc()){ 
     $str = striplashes ($str); 
    } 
    return mysql_real_escape_string($str); 
} 

//sanitize POST values 
$myusername = clean ($_POST['username']); 
$mypassword = clean (md5($_POST['password'])); 
$role = clean ($_POST['role']); 



$sql="SELECT username, password, role FROM student WHERE username='$myusername' and password='".md5($_POST['password'])."' and role = '$role'"; 
$result=mysql_query($sql); 

// Mysql_num_row is counting table row 
$count=mysql_num_rows($result); 

// If result matched $myusername and $mypassword, table row must be 1 row 
if($count==1){ 

// Register $myusername, $mypassword and redirect to file "login_success.php" 
$_SESSION ['username']; 
$_SESSION['password']; 
$_SESSION['role']; 
header("location:login_success.php"); 
} 
else { 
header ("location: login_failed.php"); 
} 
?> 
+5

Почему вы используете MD5-пароль, используя чистый, а затем игнорируете это и вставляете md5 ($ _ POST ['password']) непосредственно в свой SQL-запрос? Это выглядит немного бессмысленным (тем более, что вам все равно не нужно очищать пароль, так как вы его хэшируете. –

+0

И только хэширование пароля с MD5 недостаточно. Используйте хороший алгоритм шифрования пароля (http: // php .net/password) –

+0

Показать значения таблиц и входные значения – user2486495

ответ

0

Я буду прямым - использование MD5 является наихудшим вариантом. Остановитесь, просто остановитесь. также:

password='".md5($_POST['password'])."' 

Изменить что

password='".$mypassword."' 
+1

Это все еще использует MD5 ... –

0
  1. Не используйте простое хэширование, используйте засолки
  2. Не используйте md5, это известно сломан.
  3. Использование подготовленных операторов в запросах
  4. Рассмотрим Отступ ваш код правильно
  5. Избегайте угон сессий .. Кроме того, я не вижу session_start(),
  6. По HTTP Standard, расположение заголовка ожидает неродственного URL
  7. ...
+0

Около 6: все браузеры работают с относительными URL-адресами, стандарт должен быть соответствующим образом изменен. –

+0

У большинства браузеров есть какой-то режим quirks в html, который не делает неверный html действительным .. я могу видеть вашу точку, но я просто цитирую этот стандарт здесь – worenga

1

Ваш ясный() - метод не имеет rewardable выгоды. зачистка и уход вообще не имеет ничего общего с санитарией. Санификация связана с конкретными делами и не может быть обобщена.

Для обеззараживания/валидации посмотреть на: http://php.net/filter

Санитарные или проверка не будет препятствовать SQL-инъекции. Вы должны ...

  • Побег значение с помощью функции убегания интерфейса базы данных (PDO :: цитата(), mysqli_real_escape_string() - но не mysql_real_escape_string(), потому что это не рекомендуется)
  • непосредственно привязать значения в подготовленные операторы (привязка значений в подготовленных операторах является наиболее безопасным способом, поскольку значение будет передаваться в поле базы данных, а не в конкатенации в строку запроса)

Если вы используете PHP 5.5.0 или выше, вы можете предпочесть: http://php.net/password_hash В более низких версиях PHP вы должны солировать вручную: http://php.net/passwords

По крайней мере, заголовки местоположений недействительны, если они не определены как полные квалифицированные URL-адреса.

+0

С PHP 5.3.7 и далее вы можете использовать библиотеку совместимости: https : //github.com/ircmaxell/password_compat –

+0

Да, но я лично избегаю указывать на библиотеки, которые каким-либо образом расширяют глобальное пространство имен. (Я не рекомендую свое поведение, это именно то, что я решил в то время как обрабатывать библиотеки и распространять их доступность для сообщества) – tr0y

Смежные вопросы