簡體   English   中英

防止對php登錄系統的惡意攻擊

[英]Prevent malicious attacks on php login system

我正在開發一個允許用戶注冊和登錄的C#應用​​程序。 我打算在服務器端代碼上使用MySQL數據庫和PHP。 這是我計划使用的服務器端代碼。 這段代碼是從下面的兩篇文章中復制的。

(安全)PHP登錄系統(防止SQL注入)
用PHP登錄系統

register.php

<?php
$conn = new mysqli("db4free.net", "csharptricks", "12345678", "csharptricks");

$username = $_POST["username"];
$password = $_POST["password"];
$hashedpw = md5($password);

$stmt = $conn->prepare("SELECT username FROM Users WHERE username = ?");
$stmt->bind_param("s", $username);
$stmt->execute();
$stmt->store_result();

if ($stmt->num_rows > 0) {
     echo "Existing";
}
else { 
     $stmt = $conn->prepare("INSERT INTO Users (username, password) VALUES (?, ?);");
     $stmt->bind_param("ss", $username, $hashedpw);
     $stmt->execute();
     echo "Success";
}
?>

login.php

<?php
session_start();

$conn = new mysqli("db4free.net", "csharptricks", "12345678", "csharptricks");

$username = $_POST["username"];
$password = $_POST["password"];
$hashedpw = md5($password);

$stmt = $conn->prepare("SELECT username, password FROM Users WHERE username = ? LIMIT 1");
$stmt->bind_param("s", $username);
$stmt->execute();
$stmt->bind_result($output1, $output2);
$row = $stmt->fetch();

if($output2 == $hashedpw) { 
    $_SESSION["username"] = $username; 
    echo "LoginGood"; 
} 
else { 
    echo "LoginBad"; 
} 
?>

我是PHP的新手,所以我想從專家那里了解此代碼是否存在任何風險。 任何意見和建議都受到高度贊賞。

提前致謝。

如果您使用的是PHP 5.5.0或更高版本,則最好使用內置的password_hash()函數來生成哈希密碼。 password_hash()使用強大的單向哈希算法創建新的密碼哈希。

string password_hash ( string $password , int $algo [, array $options ] )

當前支持以下算法:

  • PASSWORD_DEFAULT-使用bcrypt算法(自PHP 5.5.0起為默認值)。 請注意,此常數旨在隨着時間的推移而變化,因為新的和更強大的算法已添加到PHP中。 因此,使用此標識符的結果的長度會隨時間變化。 因此,建議將結果存儲在可以擴展到超過60個字符的數據庫列中(255個字符將是一個不錯的選擇)。

  • PASSWORD_BCRYPT-使用CRYPT_BLOWFISH算法創建哈希。 這將使用“ $ 2y $”標識符生成標准的crypt()兼容哈希。 結果將始終為60個字符串,否則為FALSE。

  • PASSWORD_ARGON2I-使用Argon2哈希算法創建哈希。

要驗證使用password_hash()散列的password_hash() ,您需要使用password_verify()函數。

bool password_verify ( string $password , string $hash )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM