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

问题描述 投票:0回答:1

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

(Secure) PHP Login System (Protected Against SQL-Injections) Login System with 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新手,所以我想知道专家是否有任何风险。任何建议和建议都非常感谢。

提前致谢。

c# php mysql .net
1个回答
2
投票

如果您使用的是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_verify()函数。

bool password_verify ( string $password , string $hash )
© www.soinside.com 2019 - 2024. All rights reserved.