【问题标题】:How do I sent an encrypted hash over URL in CakePHP 3?如何在 CakePHP 3 中通过 URL 发送加密哈希?
【发布时间】:2014-08-27 16:33:05
【问题描述】:

我正在开发一个与哈希匹配的重置密码功能,以允许用户重置。唯一的问题是创建的散列不能在不破坏页面的情况下通过 URL 传递。例如,我的哈希是这样的:

http://localhost/users/changeResetPassword/e0b4ab1d2cdc5742c7b5f72ef6c2935dadfe458dc275b7419d9f1ac66461aa20%0F5%3A%C6%5C%26%2A%E4%D5%ACA%94%ADV%BF%EB%CAz%97O%1F%7D%F0h~%E3-.%FF%B4z%5E%1AQ%B8%8Ca%BC500%2A%EC%7B%FA%AF8%E3%2A%7F%BA%A4y%03%AE%29%94%09%26%9E%29e%E5%DEn%1At%C1%EC%F7%D4x%EAvlA%BE%5B%0D%CF

所有这些 % 似乎都打破了页面,因为我收到了这个错误:

Object not found!

The requested URL was not found on this server. If you entered the URL manually please check your spelling and try again.

如果我删除最后 % 的所有内容并再次尝试,页面加载正常。只是 URL 中的一些字符似乎使所有内容都出错了:

http://localhost/users/changeResetPassword/e0b4ab1d2cdc5742c7b5f72ef6c2935dadfe458dc275b7419d9f1ac66461aa20

这加载正常,所以我知道这只是一个 URL 问题。有什么想法吗?

【问题讨论】:

    标签: php cakephp encryption hash cakephp-3.0


    【解决方案1】:

    Base64 编码散列并传递它,然后在收到时解码。 Cake URI 解析可能会中断,因为它会尝试将那些 %xx 解释为html encoded values,但看起来它们并不是这样,因为您有 %03 之类的东西,并且来自链接:"The ASCII device control characters %00-%1f were originally designed to control hardware devices. Control characters have nothing to do inside a URL"

    关于 ndm 的评论表明您可能还需要对 base64 字符串进行 URL 编码,因为 base64 可以包含字符 + = / 我建议您还查看 url encoded forward slash is breaking url 以了解为什么简单地编码有问题的字符也可能是有问题的。如果当前传递未编码 base64 字符串的解决方案不会对您的重写规则造成任何问题,我建议您保留它。

    【讨论】:

    • 这正是答案。你摇滚。 :)
    • 虽然使用 base64 是一种合适的解决方案,但您必须注意 base64 编码会在 URL 中产生有问题的字符,即+=/,您将拥有要确保它们被 URL 编码或替换为替代品,请参见例如 stackoverflow.com/questions/1374753/… @cg22
    猜你喜欢
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    • 2013-11-29
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 2011-01-03
    相关资源
    最近更新 更多