ID 加密

未匹配的标注

Hash ID's

Masonite 散列 是一个非常有用的功能,可以防止您的ID暴露在应用程序中。

多数情况下,您需要将数据库主键公开给前端。例如,在更新记录时,您可能需要将主键值传递给类似“/users/10/settings”的 URL。

通常,对于尝试轻易更改您数据的黑客,您希望向其隐藏这些键值。

使用 Masonite 散列功能,您可以将 10 之类的值更改为 l9avmeG,并防止那些敏感的整数值暴露。

设置

Masonite 散列功能在值到达控制器之前自动对其进行解码,为此,您需要指定一个中间件来帮助解码值,以及作为模板中注册助手的提供者。

您可以轻松的添加中间件:

from masonite.essentials.middleware import HashIDMiddleware

# ..
route_middleware = {
  "web": [
    HashIDMiddleware,
    SessionMiddleware, 
    EncryptCookies,
    VerifyCsrfToken,
  ],
}

您应该将 Hash ID 中间件放在中间件堆栈的顶部,以便在到达堆栈中的其他中间件之前正确解码请求。

提供者应该还要添加:

from masonite.providers import HashIDProvider

PROVIDERS = [
  # ..
  HashIDProvider,
]

这将注册一个模板助手和一些其他有用的功能。

Helper

您可以直接使用助手轻松地对整数进行编码或解码:

from masonite.essentials.helpers import hashid

def show(self):
  hashid(10) #== l9avmeG
  hashid('l9avmeG', decode=True) #== 10

Templates

在您的模板中,您可以使用 hashid 模板助手:

<!-- user.id == 10 -->
<input type="hidden" name="user_id" value="{{ hashid(user.id) }}"

当提交到后端时,用户ID的值将是正常整数值:

def store(self, request: Request):
  request.input("user_id") #== 10

路由参数

使用模板助手时,您还可以将 hashid 功能用于请求参数:

如果你有类似这样的路由:

Route.get('/user/@user_id/updates', 'Controller@method')
<!-- user.id == 10 -->
<form action="/user/{{ user.id }}/update" method="POST">
</form>

在您的控制器内部,您可以获得未散列化的请求参数:

def store(self, request: Request):
  request.param('user_id') #== 10

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

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

原文地址:https://learnku.com/docs/masonite/4.0/fe...

译文地址:https://learnku.com/docs/masonite/4.0/fe...

上一篇 下一篇
贡献者:2
讨论数量: 0
发起讨论 查看所有版本


暂无话题~