这是我的注册码:
<?php
session_start(); //Must Start a session.
require "config.php"; //Connection Script, include in every file!
//Check to see if the user is logged in.
//'isset' check to see if a variables has been 'set'
if(isset($_SESSION['username'])){
header("location: members.php");
}
//Check to see if the user click the button
if(isset($_POST['submit']))
{
//Variables from the table
$user = $_POST['user'];
$pass = $_POST['pass'];
$rpass = $_POST['rpass'];
$email = $_POST['email'];
//Prevent MySQL Injections
$user = stripslashes($user);
$pass = stripslashes($pass);
$rpass = stripslashes($rpass);
$email = stripslashes($email);
$user = mysqli_real_escape_string($con, $user);
$pass = mysqli_real_escape_string($con, $pass);
$rpass = mysqli_real_escape_string($con, $rpass);
$email = mysqli_real_escape_string($con, $email);
//Check to see if the user left any space empty!
if($user == "" | $pass == "" | $rpass == "" | $email == "")
{
echo "Alstublieft, vul alle vakjes in!";
}
else
{
//Check too see if the user's Passwords Matches!
if($pass != $rpass)
{
echo "Passworden komen niet overeen! Probeer het opnieuw";
}
//CHECK TO SEE IF THE USERNAME IS TAKEN, IF NOT THEN ADD USERNAME AND PASSWORD INTOT HE DB
else
{
//Query the DB
$query = mysqli_query($con,"SELECT * FROM users WHERE username = '$user'") or die("Kan het niet in de tabel zetten!");
//Count the number of rows. If a row exist, then the username exist!
$row = mysqli_num_rows($query);
if($row == 1)
{
echo "Sorry, maar die username is al in gebruik! Probeer het opnieuw.";
}
//ADD THE USERNAME TO THE DB
else
{
$add = mysqli_query($con,"INSERT INTO users (id, username, password, email) VALUES (null, '$user' , '$pass', '$email') ") or die("Kan niet toevoegen!");
echo "Gelukt! <a href='login.php'> Klik hier </a>om in te loggen!";
}
}
}
}
?>
但我如何在其中使用盐? 我知道这是一个额外的安全性,但我不知道如何使用它。 我在互联网上查看了一些代码,但每次都无法使用。
答案 0 :(得分:2)
在使用salt之前,您应该考虑以密码形式存储密码。这意味着有人查看您的数据库无法看到密码纯文本。 salt对纯文本密码没有帮助。盐可以保护密码,防止所谓的“彩虹表攻击”。
为方便起见,password_hash()已经使用随机生成的盐完全哈希密码。只需将结果放入数据库即可。
要检查用户提供的密码是否与数据库中存储的密码匹配,请使用password_verify()
答案 1 :(得分:0)
要创建密码哈希,请使用crypt()
功能。您可以将salt指定为可选参数:
$hashed_password = crypt( $password, "mysalt" );
$hashed_password
现在包含密码的加密哈希值。提供salt,而不是让系统自动为您生成一个,将生成一个PHP 5.6以上的E_NOTICE。指定自己的盐更安全。
密码的加密哈希现在包含salt,并且在进行比较时可以用作salt。因此,在对用户进行身份验证时,如果$password
包含用户指定的密码,则可以将其比较如下:
if( crypt( $password, $hashed_password ) == $hashed_password ) {
// Password matches
}
答案 2 :(得分:-1)
当您想使用盐时,您真正需要做的是:
$passwordForDB = md5('your_salt_string_here'.$pass);
进行注册时。
然后在登录脚本中执行以下操作:
$password = md5('your_salt_string_here'.$_POST['pass']);
if ($passwordFromDB = $password) {
echo 'Hi User!';
}
这就是我们所说的盐,它只是混合加密数据,如生成的密钥或密码哈希
PHP还为您提供了功能
password_hash()
我建议你在文档中查看。您可以使用salt ther,只需将您的salt字符串与您要哈希的密码连接起来