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) #== 10Templates
在您的模板中,您可以使用 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本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
 
           Masonite 中文文档
 Masonite 中文文档 
         
         
             
             关于 LearnKu
                关于 LearnKu
               
                     
                     
                     粤公网安备 44030502004330号
 粤公网安备 44030502004330号