2016-02-05 4 views
1

Я сделал это:Моя система входа в систему безопасна?

<?php 

// Establishing Connection with Server by passing server_name, user_id and password as a parameter 
$connection = mysql_connect("localhost", "root", ""); 
// Selecting Database 
$db = mysql_select_db("cavallo", $connection); 
session_start(); // Starting Session 
// Storing Session 
$user_check = $_SESSION['login_user']; 
// SQL Query To Fetch Complete Information Of User 
$ses_sql = mysql_query("select username from login where username='$user_check'", $connection); 
$row = mysql_fetch_assoc($ses_sql); 
$login_session = $row['username']; 
if (!isset($login_session)) { 
    mysql_close($connection); // Closing Connection 
    header('Location: index.php'); // Redirecting To Home Page 
} 
?> 

Это протокол сеанса, сделанного мной, я боюсь, что это не безопасно.

Как вы думаете, есть способ взломать этот метод?

login.php файл: https://gist.github.com/anonymous/d7db3ea76fc4258d6512

Обновление: Я воссоздал весь сценарий с онлайн-путеводителей для безопасной login.thanks за помощь мне и сообщил о проблеме

+1

Как заполняется '$ _SESSION ['login_user']? Ваш код выглядит так, как будто он может быть восприимчив к инъекционным атакам. – Scuzzy

+0

У меня есть сообщение с сообщением с файлом login.php –

+1

Иди вживую с ним, а потом вернись и скажи нам, если это было. Изменить: короткий ответ; * Нет *. –

ответ

2

Сохранение паролей в виде строк не является безопасным ,

Read this. Я думаю, это может вам помочь.

И подробнее о SQL-инъекциях, хэшировании паролей, использовании соли с паролями, захвате сеанса.

1

Нет, это очень неуверенно.

Выполните следующие шаги для обеспечения вашей системы входа:

  1. Сохранить пароль в формате хэша, так что ваши сотрудники не могут видеть пароль пользователя.

    • Как хэш пароля:

      а. Получите пароль пользователя и сразу же их хэш.

      $password = $_POST['password']; 
      $password = hash('sha256',$password); 
      

      b. Сохраните этот хеш-пароль в своей базе данных.

  2. Теперь, как проверить учетные данные пользователя.

    $username = $_POST['username']; 
    $password = $_POST['password']; 
    
    settype($username,"string"); 
    $password = hash('sha256',$password); 
    
    $stmt = $dbConnection->prepare('SELECT * FROM login WHERE username = ? and password = ?'); 
    $stmt->bind_param('s', $username,$password); 
    
    $stmt->execute(); 
    
    $result = $stmt->get_result(); 
    while ($row = $result->fetch_assoc()) { 
        // do something with $row 
    } 
    
1

использовать подготовленные заявления и параметризованных запросов невозможно злоумышленнику внедрить вредоносный SQL. Вы можете попробовать это по запросу PDO и Mysqli.

Пример PDO

PDO является то, что SQL заявление вы передаете подготовить разобран и скомпилирован сервером базы данных.

//setting up connection 
$dbconn = new PDO('mysql:dbname=dbname;host=127.0.0.1;charset=utf8', 'root', ''); 
//prepare query 
$user_check=$_SESSION['login_user']; 
$prepareQuery = $db->prepare('INSERT INTO table (column) VALUES (:column)'); 

$perpareQuery->execute(array('column' => $user_check)); 

foreach($perpareQuery as $row) { 

} 
0

Я вижу фундаментальную ошибку: вы проверяете, существует ли только имя пользователя - вы даже не смотрите на пароль ввода. Поэтому, если я набираю имя пользователя существующего пользователя, ваша страница входа в систему предоставит мне доступ. По крайней мере исправить эту ошибку; затем переходите к рассмотрению других проблем (SQL-инъекция, отсутствие хэширования паролей), о которых говорили другие.

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