我已經建立,它使用密碼散列函數如下一個非常簡單的登錄/註冊腳本:瞭解password_verify();
$password = password_hash($password, PASSWORD_DEFAULT);
所有這一切確實需要我的密碼並彈出它到我在我所預期的格式DB。我遇到登錄部分和使用password_verify()
函數的問題,我的登錄腳本我現在很簡單,很容易進行SQL注入,但我只是想了解它是如何工作的。
這裏是我的登錄腳本:
<?php
ini_set('display_errors',1);
error_reporting(E_ALL);
ob_start();
include('db_con.php');
$username=$_POST['username'];
$password=$_POST['password'];
$username = stripslashes($username);
$password = stripslashes($password);
$sql="SELECT * FROM users WHERE username='$username' and password='$password'";
$result=mysqli_query($db,$sql);
$count=mysqli_num_rows($result);
if($count==1){
session_start();
$_SESSION['loggedin'] = true;
$_SESSION['username'] = $username;
header("location:home.php");
}
else {
echo "Wrong Username or Password";
}
ob_end_flush();
?>
我不知道在這一點我需要使用password_verify()
,因爲我知道它有兩個參數,一個是密碼,另一個是哈希?
你在這個代碼,將讓您的網站被黑客入侵的主要SQL注入漏洞。你爲什麼用這種方式編碼?從第一天開始練習安全代碼。該文檔包含一個使用'password_verify'的明確例子。 http://php.net/password_verify – ceejayoz
你讀過我的問題了嗎?我知道它容易發生SQL注入 – PhpDude
首先,請使用PDO並準備好語句。其次,你應該搜索用戶名,然後比較密碼,這樣你就知道用戶是否存在以及密碼是否正確。第三,當你比較數據庫中的密碼時,你沒有散列密碼。第四,你應該使用隨機生成的鹽,而不是所有密碼都相同的鹽,這會破壞用鹽散列的目的。 – Vilsol