2016-02-05 114 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注入,密碼散列,使用salt和密碼,會話劫持。

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注入,無密碼散列)。