我正在开发一个允许用户注册和登录的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新手,所以我想知道专家是否有任何风险。任何建议和建议都非常感谢。
提前致谢。
如果您使用的是PHP 5.5.0或更高版本,那么最好使用内置的password_hash()
函数来生成散列密码。 password_hash()
使用强大的单向散列算法创建新的密码哈希。
string password_hash ( string $password , int $algo [, array $options ] )
目前支持以下算法:
要使用password_hash()
验证密码哈希值,您需要使用password_verify()
函数。
bool password_verify ( string $password , string $hash )