Rapp_colince
28.10.2015 - 11:30
Всем привет. Для межсерверного взаимодействия нужно обмениваться http запросами и, передавать данные в строке URL.
Условия:
1. Протокол http
2. Данные нужно кодировать (против сниферов и логирования на DNS).
3. Идеально подойдет метод base64, но к сожалению его нельзя использовать по условию задачи
4. Метод шифрования должен поддерживать реализацию на PHP и на JS.
Пробовал convert_uuencode(), но с ним возникла следующая проблема. Он перекодирует в набор символов, который нельзя использовать в URL. Кавычки, собаки, двоеточия, ... . Если дополнительно шифровать urlencode(), то при отправки получившегося URL через адресную строку браузера, некоторые поступают в php уже перекодированными, а некоторые - нет. Получается путаница. Также, при некоторых комбинациях, в строке получается последовательность символов %2f, которая блокируется апачем или нджинксом.
В общем, пол дня потратил и понял, что метод слишком капризный.
Подскажите альтернативный способ шифрования, поддерживающийся на php и на js, чтобы кодировал в символы, не используемые в URL.
_____________
DedMorozzz
28.10.2015 - 13:16
Цитата (Rapp_colince @ 28.10.2015 - 10:30) |
Он перекодирует в набор символов, который нельзя использовать в URL. Кавычки, собаки, двоеточия |
Реплейсишь все символы которые нельзя юзать в урл на другие. После реплейсишь их обратно
И у бейз64 тоже не все символы можно юзать в урл. Это так, к слову...
так же можешь юзать бейз64 вместе с бинарным видом. Делаешь pack(). Его бейзом и передаёшь.
Другими словами бейз только для передачи будет, а не для конвертации
_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
Rapp_colince
28.10.2015 - 14:03
Цитата |
Реплейсишь все символы которые нельзя юзать в урл на другие |
Мне кажется, что получится как-то корявенько. Некоторые символы могу не учесть, некоторые могут появиться в будущих версиях unicode. Хотелось бы универсального решения.
Цитата |
так же можешь юзать бейз64 вместе с бинарным видом. Делаешь pack(). Его бейзом и передаёшь. |
Спасибо, добрый человек, попробую паковать.
После написания вопроса коллега предложил после urlencode() реплейсить символ % на /. После чего изчезла вероятность получить исключительные комбинации типа %2f на стыке кодированных символов. Также такой URL ничем не обрабатывается и не переводит автоматически символы (например %24 само заменялось на $) И, собственно, задача решена.
_____________
Alchemist
28.10.2015 - 19:57
простейший вариант (имхо) - перевести урл в аски коды и передавать в виде строки кодов.
$url = 'https://www.google.com/search?q=%D1%83%D1%80%D0%BB';
$encoded = implode('',array_map('dechex',array_map('ord',str_split($url,1))));
$decoded = implode('',array_map('chr',array_map('hexdec',str_split($encoded,2))));
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.