2014-08-27 64 views
0

我正在處理重置密碼功能,該功能與哈希匹配以允許用戶重置。唯一的麻煩是創建的散列不能通過URL傳遞而不會破壞頁面。例如,我的哈希值是這樣的:如何在CakePHP 3中通過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的問題。有任何想法嗎?

回答

1

Base64對散列進行編碼並將其傳遞,然後在收到時解碼。蛋糕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字符串進行網址編碼,因爲base64可以包含字符+ = /我建議您也查看url encoded forward slash is breaking url以瞭解爲什麼簡單編碼有問題的字符可能也有問題。如果當前傳遞未編碼的base64字符串的解決方案不會對您的重寫規則造成任何問題,我建議您保留它。

+0

這正是答案。你搖滾。 :) – cg22 2014-08-27 17:51:14

+2

雖然使用base64是一個合適的解決方案,但您必須注意,base64編碼可能會產生URL中存在問題的字符,即'+','='和'/',您必須確保它們正在被URL編碼或替換爲替代品,請參閱** http://stackoverflow.com/questions/1374753/passing-base64-encoded-strings-in-url** @ cg22 – ndm 2014-08-28 14:44:41