2016-04-24 4 views
0

В моей CMS у меня нет системы регистрации. Просто логин, означающий, что пароль предопределен внутри таблицы. Т.е. я ставлю свое имя пользователя и свой пароль, и я могу успешно войти в систему. Однако этот пароль отображается внутри моей таблицы. Как я могу это сделать? Когда я делаю это с помощью sha1, я не могу войти в систему. Мне нужно войти с точным паролем, который хранится в таблице.Проблема безопасности, php/mysql

Вот мой код.

<?php 
session_start(); 
?> 
<!DOCTYPE HTML> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <title>Admin Area</title> 
<link rel="stylesheet" href="login-css.css" media="all"/> 
</head> 

<body> 
<div class="login"> 
<h1>Admin Login</h1> 
    <form method="post"> 
    <input type="text" name="user_name" placeholder="Username" 
    required="required" /> 
    <input type="password" name="user_pass" placeholder="Password" 
    required="required" /> 
    <button type="submit" class="btn btn-primary btn-block btn-large" 
    name="login">Admin Login</button> 
</form> 

</div> 

<h2 style="color:#FFF; text-align:center"><?php echo 
@$_GET['not_authorized']; ?></h2> 

</body> 


</html> 

<?php 

    include("includes/connect.php"); 
if(isset($_POST['login'])){ 
    $user_name = mysqli_real_escape_string($con,$_POST['user_name']); 
    $user_pass = mysqli_real_escape_string($con,$_POST['user_pass']); 


    $check_user = "select * from user where user_name='$user_name' AND user_password='$user_pass'"; 

    $run_user = mysqli_query($con,$check_user); 



    if(mysqli_num_rows($run_user)>0){ 

     $_SESSION['user_name'] = $user_name; 

     echo "<script>window.open('index.php?logged=You have successfully 
     Logged In','_self')</script>"; 
    }else{ 
     echo "<script>alert('Username or password is incorrect')</script>"; 
    } 
    } 
?> 

И мой код таблицы sql.

CREATE TABLE IF NOT EXISTS `user` (
    `id` int(10) NOT NULL AUTO_INCREMENT, 
    `user_name` varchar(100) NOT NULL, 
    `user_password` varchar(100) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ; 

INSERT INTO `user` (`id`, `user_name`, `user_password`) VALUES 
(7, 'theo', 'test'); 

Таким образом, пароль не должен отображаться как тест.

Любые идеи,

Спасибо.

+2

Пожалуйста, используйте встроенные функции PHP для обработки паролей (http://jayblanchard.net/proper_password_hashing_with_PHP.html). Если вы используете версию PHP менее 5.5, вы можете использовать пароль_hash() [пакет совместимости] (https://github.com/ircmaxell/password_compat). Вы должны также использовать подготовленные/параметризованные запросы 'SELECT * FROM user WHERE id =?', Чтобы избежать внедрения sql. По теме: выберите пользователя по имени, затем сравните хранимый хэш с помощью 'password_verify()' – JimL

+0

** ПРЕДУПРЕЖДЕНИЕ **: Написание собственного уровня контроля доступа непросто, и есть много возможностей, чтобы заставить его серьезно ошибиться. Пожалуйста, не пишите свою собственную систему аутентификации, если какая-либо современная [инфраструктура разработки] (http://codegeekz.com/best-php-frameworks-for-developers/), например [Laravel] (http://laravel.com/) поставляется с надежной системой аутентификации (https://laravel.com/docs/5.2/authentication). В абсолютном минимуме следуйте [рекомендуемым рекомендациям по безопасности] (http://www.phptherightway.com/#security) и никогда не храните пароли как обычный текст. – tadman

ответ

0

Вы можете конвертировать пароль $user_pass = mysqli_real_escape_string($con,$_POST['user_pass']); sha1 и передавать его в запрос.

Но лучше всего собирать информацию пользователя с именем пользователя и проверять строку с преобразованным паролем (sha1) со значением столбца пароля, полученным из запроса.

+1

Спасибо. Я сделал это работать :) – Theo

+0

Рад помочь вам :) – Mujahidh

+0

SHA1 полностью неадекватен. По крайней мере используйте 'password_hash'. – tadman

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