c# - 防止php登录系统被恶意攻击

标签 c# php mysql .net

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

(Secure) PHP Login System (Protected Against SQL-Injections)
Login System with 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 )

关于c# - 防止php登录系统被恶意攻击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52232323/

相关文章:

C# 不识别安全 token 句柄

mysql日期时间查询求助?

c# - 带有 IHtmlHelper 引用的自定义 Razor 助手

c# - 使用存储 C#.Net CNG 中的 key 的 ECDSA 签名文件

c# - 在变化的位置插入琴弦

javascripting 哪个网站接受发布javascript

javascript - 提示数字或字符仅在文本框中输入值?在 AngularJS 中如何?

php - 模板 Blade 中的 Laravel 语言处理程序

php 测验脚本,它使用复选框并动态从数据库检索值

c# - 在一个文本框中进行多次搜索 my sql c#