2014-08-27 2 views
0

Я работаю над функцией сброса пароля, которая соответствует хэшам, чтобы пользователь мог выполнить сброс. Единственная проблема заключается в том, что хэш, который был создан, не может быть передан через URL, не нарушая страницу. Например, мой хэш-это:Как отправить зашифрованный хеш по URL-адресу в CakePHP 3?

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 кодирует хэш и передает его, а затем декодирует при его получении. Cake URI разбора вероятных разрывов, потому что он будет пытаться интерпретировать эти% хх как 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"

Что касается комментария РПС в индикации вам может понадобиться URL-адрес для кодировки строки base64, поскольку base64 может содержать символы + = /. Я бы порекомендовал вам также посмотреть на url encoded forward slash is breaking url, чтобы понять, почему просто кодирование проблемных символов также может быть проблематичным. Если текущее решение по передаче незакодированных строк base64 не вызывает никаких проблем с вашими правилами перезаписи, я бы порекомендовал вам сохранить его как есть.

+0

Это точно ответ. Ты жжешь. :) – cg22

+2

Хотя использование base64 является подходящим решением, вы должны знать, что кодировка base64 может создавать символы, которые являются проблематичными в URL-адресах, то есть '+', '=' и '/', вам нужно убедиться, что они кодируются URL или заменяются заменителями, см., например, ** http: //stackoverflow.com/questions/1374753/passing-base64-encoded-strings-in-url** @ cg22 – ndm

 Смежные вопросы

  • Нет связанных вопросов^_^