0

我正在研究与哈希匹配的重置密码功能,以允许用户重置。唯一的问题是创建的散列不能在不破坏页面的情况下通过 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 问题。有任何想法吗?

4

1 回答 1

1

Base64 对哈希进行编码并将其传递,然后在收到时解码。Cake URI 解析可能会中断,因为它会尝试将这些 %xx 解释为html 编码值,但由于您有 %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 编码的正斜杠正在破坏 url以了解为什么简单地编码有问题的字符也可能有问题。如果当前传递未编码的 base64 字符串的解决方案不会导致您的重写规则出现任何问题,我建议您保留它。

于 2014-08-27T16:50:05.803 回答