gpt4 book ai didi

php - Symfony:如何自动加密/解密路由参数?

转载 作者:可可西里 更新时间:2023-11-01 12:50:33 25 4
gpt4 key购买 nike

我想在 URL/路由中自动en-/decrypt 参数(例如 ID),例如:

domain.com/item/show/1 应该类似于 domain.com/item/show/uj7hs2

当前(伪)代码

public function myControllerFunctionAction() {
// ...
$id = $this->get('my.crypt')->encrypt($item->getId());
return $this->redirectToRoute('routeTo_myOtherControllerAction', array('id' => $id));
}

public function myOtherControllerFunctionAction($id) {
$id = $this->get('my.crypt')->decrypt($id); // decrypt

$item = $this->get('my.repository')->find($id);
// ...
}

我想避免手动加密/解密

像这样的东西会很完美:

# routing.yml
routeTo_myOtherControllerAction:
path: /item/show/{id}
defaults: { _controller: appBundle:Items:show }
options:
crypt_auto: true
crypt_method: %default_crypt_method%

除了我的服务,我还找不到任何其他解决方案。有什么想法吗?

提前致谢!

最佳答案

所以,澄清一下:

  1. 您想混淆数据库记录 ID(即主键)吗?
  2. 您希望生成的 URL 简短。

如果您对这两个问题的回答都是"is",请考虑关注此 guide to URL parameter encryption .

人们想在这里做什么

Some encryption function is used to deterministically retrieve the ID

人们应该做什么

Use a separate column

如果我接受更长的 URL 怎么办?

使用defuse/php-encryption .它提供了authenticated encryption并且是研究最深入的可用 PHP 加密库之一。 (它也是许可许可的。)

$decrypted = Crypto::decrypt($urlParameter, $yourKey);
// ... snip ... //
echo "<a href=\"/your/url/?".http_build_query([
'id' => Crypto::encrypt($yourRowId, $yourKey)
])."\">";

关于php - Symfony:如何自动加密/解密路由参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33542940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com