Php 为什么我存储密码的哈希/盐技术不起作用?
我试图建立一个安全的,自定义的,用户登录系统,但它目前不工作。其想法是创建一个具有安全、加密密码的用户。但是,当使用正确的密码时,它不会登录到该站点 使用密码时输出Php 为什么我存储密码的哈希/盐技术不起作用?,php,hash,mysqli,salt,Php,Hash,Mysqli,Salt,我试图建立一个安全的,自定义的,用户登录系统,但它目前不工作。其想法是创建一个具有安全、加密密码的用户。但是,当使用正确的密码时,它不会登录到该站点 使用密码时输出123456789jp: $6$j7Rd68RhKNx.6ccH$9lvRDdks.jx4hk7.YQ0hpvzPE22h/BZQ/9YXIWTMV1KX2XR2GBIZJXYJELRA41NL2WGJMT.FMQi877uOXrP1 相关职能: // function register_user() function bruger_
123456789jp
:
$6$j7Rd68RhKNx.6ccH$9lvRDdks.jx4hk7.YQ0hpvzPE22h/BZQ/9YXIWTMV1KX2XR2GBIZJXYJELRA41NL2WGJMT.FMQi877uOXrP1
相关职能:
// function register_user()
function bruger_opret_siden(){
if ($stmt = $this->mysqli->prepare('SELECT NULL FROM `bruger` WHERE `brugernavn` = ?'))
{
$stmt->bind_param('s', $brugernavn);
$brugernavn = $_POST["brugernavn"];
$stmt->execute();
$stmt->store_result();
$count = $stmt->num_rows;
$stmt->close();
if($count > 0)
{
$user_found = 1;
}
}
if(!isset($user_found))
{
//Check if the user exists.
if(!isset($errors))
{
$pb = null;
include 'function/class.upload.php';
$handle = new Upload($_FILES["file"]);
if($handle->uploaded)
{
//trims to next request
}
$password = $_POST["pass"];
$algorithm = '$6$'; //<--- This means the SHA 512
$salt = $this->generateSalt(16); //<--- SHA 512 uses a 16-character salt
$hash = crypt($password, $algorithm . $salt);
if ($stmt = $this->mysqli->prepare('INSERT INTO `bruger`
(`rank`, `email`, `brugernavn`, `password`, `profilbillede`, `profilbillede_godkendt`, `navn`, `efternavn`, `alder_d`, `alder_m`, `alder_aar`, `status`, `kon`, `seksualitet`, `land_by`, `hojde`)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'))
{
$stmt->bind_param('issssisssssiiisi', $rank, $email, $brugernavn, $password, $profilbillede, $pb_godkendt, $navn, $efternavn, $alder_d, $alder_m, $alder_aar, $kon, $seksualitet, $partnerstatus, $land_by, $hojde);
$rank = '1';
$pb_godkendt = '1';
$email = $_POST["email"];
$brugernavn = $_POST["brugernavn"];//C
$password = $hash;//C
$profilbillede = $pb;//C
$navn = $_POST["navn"];
$efternavn = $_POST["efternavn"];
$alder_d = $_POST["alder_d"];
$alder_m = $_POST["alder_m"];
$alder_aar = $_POST["alder_aar"];
$kon = $_POST["kon"];
$seksualitet = $_POST["seksualitet"];
$partnerstatus = $_POST["partnerstatus"];
$land_by = $_POST["land_by"];
$hojde = $_POST["hojde"];
$stmt->execute();
$stmt->close();
echo "ok";
}
else
{
// There was an error
echo 'error: ' . $mysqli->error;
}
}
}
else
{
echo "<li id=\"check_not\">Dette brugernavn er optaget!!</li>";
}
}
以下函数包含问题;它不会让用户登录。虽然没有产生错误,但它不起作用
function godkendt_login()
{
if ($stmt = $this->mysqli->prepare("SELECT `id`, `brugernavn`, `rank`, `profilbillede`, `profilbillede_godkendt` FROM `bruger` WHERE `brugernavn` = ? AND `password` = ?"))
{
$stmt->bind_param('ss', $brugernavn, $password);
$brugernavn = $_POST["brugernavn"];
$password = sha1($_POST["pass"]);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($id, $brugernavn, $rank, $profilbillede, $profilbillede_godkendt);
$stmt->fetch();
$count = $stmt->num_rows;
$stmt->close();
if($count > 0)
{
$_SESSION["logged_in"] = true;
$_SESSION["id"] = $id;
$_SESSION["profilbillede"] = $profilbillede;
$_SESSION["brugernavn"] = $brugernavn;
$_SESSION["rank"] = $rank;
$_SESSION["profilbillede_godkendt"] = $profilbillede_godkendt;
if($_SESSION["logged_in"] == true)
{
echo "ok";
}
else
{
// Sorry, please try again.
echo "Desværre prøve igen."
}
}
else
{
echo "Skrive et password eller brugernavn"
}
}
}
日志文件/inc文件:
<?php
/*
* // Grant the administrative privilige to show the content.
* Giver admin adgang til se indhold på siden.
*/
if(isset($_SESSION["rank"]) && $_SESSION["rank"] > 0) {
$bruger = $mebe->brugerindhold_side();
}
/*
* // Grant normal access to the page.
* Hvis ingen af dem så få de bare adgang sådan her..
*/
else{
?>
<form name="login" method="post" action="#">
<h1>Log ind</h1>
<p>Brugernavn</p><input type="text" name="brugernavn"/>
<p>Password</p><input type="password" name="pass"/>
<br />
<input type="submit" name="Log_ind" value="Log ind" id="login">
<?php
if(isset($_POST["Log_ind"]))
{
$login = $mebe->godkendt_login();
}
?>
</form>
<?php
}
?>
日志索引
布鲁格纳文
密码
好的,由于语言差异,我无法完全理解您的代码。
盐应为可再现值。从我收集的信息来看,你的似乎是随机生成的
如果是这样,哈希值就不会相加,因此检查失败。
对散列使用常量值,不要将其存储在数据库中
例如:
<?php
function generateHash($in)
{
$salt = "Th1s1sAS4lt";
return md5(sha1($in) . $salt);
}
?>
此外,应检查任何post值,因为它是由用户输入的,可能包含非法字符或有害代码。遵守以下规定:
<?php
// Note that the input contains SQL.
// bemærke, at de input indeholder SQL.
$_POST['passwd'] = "'p@ssword' OR 'a' = 'a'";
if (tilmeld_dig())
{
// Log the user in.
// brugeren er logget på
}
function tilmeld_dig()
{
$sql = "SELECT brugernavn from tbl_brugere WHERE adgangskode = " . $_POST['passwd'];
// Execute the database command.
$res// = Database kommando udføre
if ($res)
{
return true;
}
else
{
return false;
}
}
?>
在上面的示例中,无论密码是什么,用户都会登录,因为注入的SQL命令将始终为真
虽然这是一个粗略的例子,但请回顾一下:
我试图用一些丹麦的评论来支持你,因为这在安全系统中很重要。你说得对,但我建议你看看我的建议
此外,这是未经测试的代码,但或多或少是如何工作的。您的问题现在解决了吗?这似乎是代码的问题,但我不确定它是否解决了您的问题。此外,我怀疑您在保护有关外星生命的信息,因为这是一个该死的密码!;)现在松了:)我就这样系上带子<代码>$password=sha1('ri629'.$_POST[“pass”]。'h1ry6328')代码>好的,您是否直接使用post值?因为这在安全上留下了一个很大的漏洞。我建议你处理发布的值,在使用前检查它是否正确。我不太明白你的意思?
<?php
function generateHash($in)
{
$salt = "Th1s1sAS4lt";
return md5(sha1($in) . $salt);
}
?>
<?php
// Note that the input contains SQL.
// bemærke, at de input indeholder SQL.
$_POST['passwd'] = "'p@ssword' OR 'a' = 'a'";
if (tilmeld_dig())
{
// Log the user in.
// brugeren er logget på
}
function tilmeld_dig()
{
$sql = "SELECT brugernavn from tbl_brugere WHERE adgangskode = " . $_POST['passwd'];
// Execute the database command.
$res// = Database kommando udføre
if ($res)
{
return true;
}
else
{
return false;
}
}
?>