在我ZF2应用程序,我想我的加密参数,使得具有像/产品/更新/ 1将显示为/产品/更新/ cdsk45kdi340kd0wlw0或类似链接时。我需要在控制器和视图中对它进行加密和解密。什么是最好的方法呢?感谢您的任何帮助。ZF2加密参数
ZF2加密参数
回答
这里的关键是,你想避免用户猜测的URL。我会为每个产品生成一个随机标记。在您的数据库中存储此令牌以及产品的标识(以及所有其他属性)。
要生成一个随机字符串作为标记,可以使用Zend\Math\Rand
:Rand::getString(10);
为您提供一个随机的10个字符的字符串。将产品存储在数据库中时,为每个产品生成一个随机字符串。然后,在您的控制器中,您不会根据标识符(id)获取产品,而是基于该标识。
确保您验证的唯一性。你也可以使用uniqid()而不是随机函数。 – dualmon
当然,好点。至少在你的数据库上设置一个唯一的约束,并检查该令牌是否已经存在。 –
而不是随机生成,你可以一个base64或MD5 id和名字联系在一起,它会为你节省存储在DB什么(另一个数据库调用来检索)。这就是通常处理外部唯一URL的方式。如果它需要每个用户都是唯一的,则可以将用户电子邮件和/或ID包含在您加密/编码的字符串中。 –
化妆路线是这样的
'product' => array(
'type' => 'Zend\Mvc\Router\Http\Segment',
'options' => array(
'route' => '/product/update[/:hashedid]',
'constraints' => array(
'hashedid' => '[a-zA-Z0-9-_\.]+',
),
'defaults' => array(
'controller' => 'Index',
'action' => 'index',
),
),
),
和控制器
$hashedid = $this->params()->fromRoute('hashedid', 0);
$id = $this->dehash($hashedid);
感谢您的回复......但我用什么来散列id?我宁愿用盐腌哈希...... – cwhisperer
@cwhisperer你可以使用任何你想要的盐听起来不错这里http://stackoverflow.com/a/1289114/3223896 – Skaza
谢谢你的链接。不幸的是,BASE64_ENCODE生成加密的字符串,这让我的路线斜杠(/),检查agains约束,无效.... – cwhisperer
- 1. 加密参数
- 2. Servlet参数加密
- 3. 加密函数的参数
- 4. SSL加密ZF2 PDO连接到Mysql
- 5. HTTPS加密和GET参数
- 6. 使用openssl加密参数
- 7. SignalR加密QueryString参数
- 8. 加密persistence.xml中的参数
- 9. 加密配置参数
- 10. URL中的加密参数
- 11. MVC WebAPI参数加密
- 12. 春季加密和解密URL参数
- 13. 解密servlet参数,用BasicTextEncryptor加密
- 14. ZF2模块配置service_manager添加构造函数参数
- 15. ZF2从服务管理器获得服务,附加参数
- 16. 工厂没有被加载ZF2 - 缺少参数1
- 17. ZF2工厂中获取参数
- 18. ZF2 - 缺少参数1 XXXController :: __结构()
- 19. 访问查询参数onBootstrap ZF2
- 20. IQuery NHibernate - 我必须加密一个加密的IUserType参数吗?
- 21. 如何将Java(Android)加密参数转换为iOS加密?
- 22. 加密获取参数(URL)Tomcat/Servlet
- 23. 加密URL参数不工作
- 24. 处理加密的HttpUtility.UrlEncode参数
- 25. GET/POST参数是否加密?
- 26. RSA加密中的D/DP/DQ参数
- 27. 加密参数发布与循环J
- 28. RSA加密中的fOAEP参数
- 29. 跨控制器加密参数
- 30. 加密网址查询参数
你能解释一下使用“加密”这样做的原因是什么?为什么uuid,slug或hash不够? –
我只是想避免这种情况,用户可打电话与猜测ID的一个网址...哈希将是一个很好的选择,你可以给我一个例子吗? – cwhisperer