防止对PHP登录系统的恶意攻击



我正在开发一个允许用户注册和登录的 C# 应用程序。我计划在服务器端代码上使用MySQL数据库和PHP。 这是我计划使用的服务器端代码。此代码复制自以下两篇文章。

(安全(PHP 登录系统(防止 SQL 注入(
使用 PHP 的登录系统

注册.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";
}
?>

登录.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 算法创建 散 列。这将生成一个标准的 crypt(( 兼容哈希,使用 "$2y$"标识符。结果将始终是一个 60 个字符的字符串, 或失败时为 FALSE。

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

要使用password_hash()验证密码哈希,您需要使用password_verify()函数。

bool password_verify ( string $password , string $hash )

最新更新