Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 防止对php登录系统的恶意攻击_C#_Php_Mysql_.net - Fatal编程技术网

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

C# 防止对php登录系统的恶意攻击,c#,php,mysql,.net,C#,Php,Mysql,.net,我正在开发一个C#应用程序,允许用户注册和登录。我计划在服务器端代码上使用MySQL数据库和PHP。 下面是我计划使用的服务器端代码。此代码复制自以下两篇文章 register.php <?php $conn = new mysqli("db4free.net", "csharptricks", "12345678", "csharptricks"); $username = $_POST["username"]; $password = $_POST["password"]; $h

我正在开发一个C#应用程序,允许用户注册和登录。我计划在服务器端代码上使用MySQL数据库和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";
}
?>
<?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"; 
} 
?>

login.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
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新手,所以我想从专家那里知道这段代码是否存在任何风险。非常感谢您的任何建议和建议


提前感谢。

如果您使用的是PHP5.5.0或更高版本,最好使用内置函数来生成哈希密码
password\u hash()
使用强大的单向散列算法创建新的密码散列

string password_hash ( string $password , int $algo [, array $options ] )
目前支持以下算法:

  • 密码\u默认值-使用bcrypt算法(从PHP开始为默认值 5.5.0). 请注意,这个常量的设计目的是随着新的、更强的算法添加到PHP中,随着时间的推移而改变。出于这个原因 使用此标识符的结果长度可能会随时间而变化。 因此,建议将结果存储在数据库列中 可以扩展到60个字符以上(最好是255个字符) 选择)

  • 密码\u BCRYPT-使用CRYPT\u BLOWFISH算法创建 搞砸这将使用 “$2y$”标识符。结果将始终是一个60个字符的字符串, 或失败时为假

  • 密码\u ARGON2I-使用Argon2哈希算法创建哈希

要验证使用
password\u hash()
散列的密码,需要使用函数

bool password_verify ( string $password , string $hash )

如果您使用的是PHP5.5.0或更高版本,最好使用内置函数来生成哈希密码
password\u hash()
使用强大的单向散列算法创建新的密码散列

string password_hash ( string $password , int $algo [, array $options ] )
目前支持以下算法:

  • 密码\u默认值-使用bcrypt算法(从PHP开始为默认值 5.5.0). 请注意,这个常量的设计目的是随着新的、更强的算法添加到PHP中,随着时间的推移而改变。出于这个原因 使用此标识符的结果长度可能会随时间而变化。 因此,建议将结果存储在数据库列中 可以扩展到60个字符以上(最好是255个字符) 选择)

  • 密码\u BCRYPT-使用CRYPT\u BLOWFISH算法创建 搞砸这将使用 “$2y$”标识符。结果将始终是一个60个字符的字符串, 或失败时为假

  • 密码\u ARGON2I-使用Argon2哈希算法创建哈希

要验证使用
password\u hash()
散列的密码,需要使用函数

bool password_verify ( string $password , string $hash )

您应该销毁会话,即在login.php代码开始时取消设置($_session['username'])。
md5
不是散列任何内容的安全方法,更不用说密码了。您应该销毁会话,即在login.php代码开始时取消设置($_session['username'])。
md5
不是散列任何内容的安全方法,更不用说密码了