安全加密

未匹配的标注
本文档最新版为 4.0,旧版本可能放弃维护,推荐阅读最新版!

加密

简介

Masonite 提供了现成的 bcrypt,但让开发人员实际加密密码之类的东西。您可以选择使用任何其他哈希库,但 bcrypt 是许多库的标准,并且带有某种单向哈希算法,没有已知的漏洞。许多哈希算法(例如SHA-1和MD5)都不安全,因此不应在应用程序中使用它们。

您可以在此处阅读bcrypt文档

背景

另外,我们确保 Javascript 无法读取您的 Cookies。很重要的一点是,尽管您的网站可能是安全的,但如果您导入第三方 Javascript 包(因为这些库可能被破坏),则它可以读取您的网站上的所有 cookie 并将其发送给黑客,则您很容易受到攻击。

其他框架使用加密签名,该签名会将一个特殊密钥附加到 cookie 上以防止操纵。这没有意义,因为 XSS 保护的主要部分是阻止第三方读取 Cookie。如果您不希望第三方看到 Cookie (例如会话 ID ),则将数字签名附加到明文 Cookie 上是没有意义的。 Masonite 则更进一步,对整个字符串进行加密,并且只能使用您的密钥才能解密(因此请确保您对其保密!)。

密钥

.env文件中,您将找到一个名为KEY = 您的密钥的设置。这是用于加密和解密 Cookie 的 SALT。在开发之前改变此密钥很重要。您可以通过运行以下命令生成新的密钥:

$ craft key

这将在终端中生成一个新密钥,您可以将其复制并粘贴到您的.env文件中。您的config / application.py文件使用此环境变量来设置KEY配置设置。

此外,您可以传递--store标志,该标志将自动为您设置.env文件中的KEY =值:

$ craft key --store

请记住不要共享此密钥,因为丢失此密钥可能导致某人能够解密您的应用程序设置的任何 cookie。如果发现您的密钥已被盗用,只需生成一个新密钥即可。

加密签名

您可以使用 Masonite 用于加密任何所需数据的 Cookie 的相同加密签名。只需导入masonite.sign.Sign类。完整的签名如下所示:

from masonite.auth import Sign

sign = Sign()

signed = sign.sign('value') # PSJDUudbs87SB....

sign.unsign(signed) # 'value'

默认情况下,Sign()使用config / application.py文件中的加密密钥,但也可以传入自己的密钥。

from masonite.auth import Sign

encryption_key = b'SJS(839dhs...'

sign = Sign(encryption_key)

signed = sign.sign('value') # PSJDUudbs87SB....

sign.unsign(signed) # 'value'

此功能使用pyca / cryptography进行这种加密。因此,我们可以使用 Fernet 生成密钥。

from masonite.auth import Sign
from cryptography.fernet import Fernet

encryption_key = Fernet.generate_key()

sign = Sign(encryption_key)

signed = sign.sign('value') # PSJDUudbs87SB....

sign.unsign(signed) # 'value'

请记住并存储您生成的密钥,否则您将无法解密最初加密的任何值。

使用 Bcrypt

Bcrypt 非常易于使用,基本上由一个单向哈希组成,然后检查该单向哈希是否与给定的输入相匹配。

必须注意,传递给 Bcrypt 的任何值都必须以字节为单位。

哈希密码

同样,传递给 bcrypt 的所有值都必须以字节为单位,以便我们可以使用 password helper 函数传入密码:

from masonite.helpers import password

encrypted_password = password('secret')

请注意,使用bytes() Python 函数将请求传入的值转换为字节。

密码经过哈希处理后,我们就可以安全地将其存储到数据库中

User.create(
    name=request.input('name'),
    password=password,
    email=request.input('email'),
)

不要在数据库中存储未隐藏的密码。另外,请勿使用不安全的加密方法,如 MD5 或 SHA-1。

检查哈希密码

为了检查密码是否与哈希形式相匹配(例如尝试登录用户),我们可以使用bcrypt.checkpw()函数:

bcrypt.checkpw(bytes('password', 'utf-8'), bytes(model.password, 'utf-8'))

如果字符串'password'等于 models 中的密码,则返回true。

有关 Bcrypt 的更多信息,请阅读其文档。

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/masonite/2.3/se...

译文地址:https://learnku.com/docs/masonite/2.3/se...

上一篇 下一篇
贡献者:1
讨论数量: 0
发起讨论 只看当前版本


暂无话题~