我得到了这个任务,到目前为止,我一直在使用sha1进行安全保护。老师上周五给我们回电话,告诉我们用password_hash。知道这是明天的事,我试图弄清楚这是如何工作的,但不要把我的头包在里面。我发现很多人谈论它但没有这些工作为我如何使用password_hash注册和登录
目前,正如分配给我的那样,我只使用PDO并返回到我以前的工作代码(使用sha1)
<?php
ob_start();// TEST
include("inc/timer.inc.php");//session
require("inc/database.inc.php");//connection website
$title='website';
if (isset($_POST['formConnection'])) {
$loginConnection = filter_input(INPUT_POST, 'loginConnection', FILTER_SANITIZE_FULL_SPECIAL_CHARS );
// Connection sha1- OLD
$passwordConnection = sha1($_POST['passwordConnection']);
// Connection password_hash
//$hash = $profile['password'];
//$passwordConnection = password_verify($_POST['passwordConnection'], $hash);
if (!empty(($loginConnection) AND !empty($passwordConnection))) {
$connection = $website->prepare("SELECT * FROM members WHERE login = ? AND password= ?");
$connection->execute(array($loginConnection, $passwordConnection));
$userExists = $connection->rowCount(); //Test existence et affectation à la session des valeurs
if ($userExists == 1) {
$profile = $connection->fetch();
$_SESSION['idMember'] = $profile['idMember'];
$_SESSION['login'] = $profile['login'];
$_SESSION['status'] = $profile['status'];
header("Location: member-detail.php?idMember=".$_SESSION['idMember']);
} else {
echo "<script>alert(\"Wrong login or password\")</script>";
}
} else {
echo "<script>alert(\"Please check your login or your password\")</script>";
}
}
?>
<body>
<form method="post" action="">
<div class="form-group">
<label for="loginConnection">login</label><br>
<input type="text" class="form-control" name="loginConnection" id="loginConnection"
placeholder="login" required><br><br>
</div>
<div class="form-group">
<label for="passwordConnection">password</label><br>
<input type="password" class="form-control" name="passwordConnection" id="passwordConnection"
placeholder="Mot de Passe" required><br><br>
</div>
<input type="submit" name="formConnection" value="Se connecter">
<div class="form-group">
<a href="subscribe.php">Not subscribed yet?</a>
</div>
</form>
<br><br>
</body>
我知道它应该是一个布尔值,但我不知道如何使用它。
有关于这个的分步教程吗?我可能错过了。谢谢
您必须从数据库获取用户,然后使用password\u verify
检查密码。因此,只需从login=?的成员中选择*,然后在if($userExists==1){
中,如果密码验证($\u POST['passwordConnection'],$profile['password')
为false,则登录失败。
password\u verify()
函数将与password\u hash()函数一起使用。
将从
密码\u hash()
生成的哈希存储在数据库中。当有人试图登录时,您将根据哈希测试他们提供的密码。如果password\u verify()
返回true,则密码匹配。
您不应该使用
password_hash()
重新设置密码,因为每次都会得到不同的答案(如果使用随机盐,您应该这样做)。当您使用password_hash()
散列密码时,默认情况下,它使用随机盐来散列密码。这个随机盐被编码到生成的哈希字符串中,以便password_verify()
可以使用与最初哈希时相同的盐来验证它。
基本上,您应该从数据库中为试图登录的用户检索哈希,并将其提供给
password_verify()
函数。除了盐,散列还包含关于使用哪个散列算法的信息。
<?php
// See the password_hash() example to see where this came from.
$hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq';
if (password_verify('rasmuslerdorf', $hash)) {
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}
?>
问题内容: 在担任前端开发人员的头几个月后,我才开始涉足后端开发。我正在使用postgreSQL,似乎无法将我的头放在nextval()函数周围。我读了这篇,但对我来说还不清楚。 http://www.postgresql.org/docs/current/interactive/functions- sequence.html nexval()有什么好处/用例? 问题答案: 是从序列中获取下一个
我正在使用JMX远程监控我的服务器。但是,jmx-access和jmx密码存储我不想要的清除密码。 接下来是如何为JConsole的密码文件加密密码,如何使JMX自定义身份验证工作?以及如何创建登录模块?,我编写了一个自定义登录模块。 我的登录模块: 这是我的登录模块配置文件(d:/mysecurity.cfg): 启动服务器时,我使用以下参数: 然而,当我试图用JCsonle连接服务器时,我无法
下面是一个链表的简单实现。我刚刚添加了相关代码。首先,我向列表中添加一些值,10,990和10000。当我搜索相同的值时,对于key=10,我得到true,但是对于key=990和key=10000得到false,尽管它应该是true。另外,如果我将第二个值从990更改为99,并搜索key=99,这一次我得到的是true。 我不确定是否使用泛型类型。我想我在那里做错了什么。因为如果我用int替换泛
我正在创建一个非常简单的验证码验证过程。
我正在通过一些在线示例学习区块链。我有一个高级代码,我用前面的散列创建一个新的块,然后向其中添加一个事务,然后生成一个困难的块散列(有8个前导零) 这很有效。但我有一个问题,在向区块链添加区块之前,如何验证该工作证明。 即。假设生成了一个包含8个前导零的散列
我试图完全理解密码散列,以便能够向审计员解释它。 基于我对答案的搜索,我知道函数是的包装器。在阅读预定义常量的PHP手册时,我看到它使用作为默认整数值(基本上它使用算法来散列密码)。 让我困惑的是,变量如果省略,会生成一个随机salt,并且成本将设置为。如果我提供了更高的成本(例如:),由于我没有提供salt值,它还会生成随机salt吗?我在这里感到困惑的原因是,我没有忽略,而是提供了不同的成本。