最近,我一直在try 在我在互联网上偶然发现的一个登录脚本上实现我自己的安全性.在努力学习如何制作自己的脚本 for each 用户生成一个salt之后,我偶然发现了password_hash个.

据我所知(根据this page的读数),当你使用password_hash时,盐已经在一行中生成.这是真的吗?

我的另一个问题是,吃两种盐不是很明智吗?一个直接在文件中,一个在数据库中?那样的话,如果有人在数据库中泄露了你的盐,你仍然直接在文件中保留了那一个?我在这里读到,储存盐分从来都不是一个聪明的主意,但它总是让我困惑人们的意思是什么.

推荐答案

建议使用password_hash存储密码.不要将它们分离为数据库和文件.

假设我们有以下输入:

$password = $_POST['password'];

首先通过以下操作对密码进行哈希:

$hashed_password = password_hash($password, PASSWORD_DEFAULT);

然后查看输出:

var_dump($hashed_password);

如你所见,它是散列的.(我假设您已经完成了这些步骤).

现在,您将这个哈希密码存储在数据库ensuring your password column is large enough to hold the hashed value (at least 60 characters or longer)中.当用户要求登录时,您可以通过以下操作在数据库中使用此哈希值判断密码输入:

// Query the database for username and password
// ...

if(password_verify($password, $hashed_password)) {
    // If the password inputs matched the hashed password in the database
    // Do something, you know... log them in.
} 

// Else, Redirect them back to the login page.

Official Reference

Php相关问答推荐

PHP FFI—Convert void * to int

在Laravel中,如果我用session—put()存储一些信息,客户端浏览器是否可以使用这些信息?>

在ShipStation for WooCommerce中使用自定义订单项目元数据

如何将对我的域的请求重定向到子文件夹中的索引,同时保留域URL并使用.htaccess?

将变体设置字段添加到WooCommerce中的特定变量产品

在PHP中循环访问多维数组,并按组显示内容

Laravel:如何展平多维Eager 加载的集合

WooCommerce中基于用户角色的不同产品差价

API 平台 - UI 服务器端点定义

如何从 URL 核心 PHP 中的 API 获取 JSON?

为什么 php 只能在我的 Nginx Web 服务器的某些目录中工作?

使用用户元数据填写 woocommerce checkout 字段

Symfony:指定 data_class 时,提交的表单获取初始化前不得访问

当所有对象都属于同一类型时,我可以省略 PHP in_array() 中的 strict 参数吗?

设置GA4 PHP API的setSubject以允许访问所有管理员账户属性

如何在 Laravel 中修改嵌套数组的键?

正则表达式请帮我从内容中找到这个词

如何从此字符串创建 Carbon 对象:2022-06-21T05:52:46.648533678Z?

Laravel 测试 assertJsonMissing 不适用于唯一的键.为什么?

计算组合指数