vbondarevsky / Connector

Коннектор: удобный HTTP-клиент для 1С:Предприятие 8
Apache License 2.0
638 stars 207 forks source link

Некорректно формируется AWS4 аутентификация на старых платформах #29

Closed leemuar closed 4 years ago

leemuar commented 4 years ago

Портировали Коннектор на более старый режим совместимости - 8.3.11.2867, режим совместимости Версия 8.2.13.

Обнаружили, что некорректно формируется подпись AWS4 в случае когда запрос не содержит параметров (вида ?name=1&action=put)

Формируется неверный канонический запрос, канонические параметры запроса устанавливаются равными "=". Из за этого рассчитывается неверная подпись.

Пример правильного канонического запроса:

GET
/

host:chefstorage.s3.us-east-1.amazonaws.com
x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
x-amz-date:20200214T181103Z

host;x-amz-content-sha256;x-amz-date
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Пример неправильного канонического запроса, формируемого Коннектором на старой платформе:

GET
/
=
host:chefstorage.s3.us-east-1.amazonaws.com
x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
x-amz-date:20200214T181103Z

host;x-amz-content-sha256;x-amz-date
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Проблема в функции РазобратьURL(), РазобратьURL("http://localhost/") на старых версиях платформы вернет структуру, ключ "Параметры" которой будет содержать массив с одной пустой строкой

В новых версиях платформы РазобратьURL("http://localhost/") в "Параметры" возвращает пустой массив

В ЗаполнитьПараметрыЗапроса() когда Запрос равен пустой строке, СтрРазделить(Запрос, "&", Ложь) на старых версиях платформы возвращает массив, содержащий одну пустую строку. Из-за такого поведения канонические параметры формируются неверно. В новых версиях платформы СтрРазделить("", "&", Ложь) возвращает пустой массив, там библиотека работает корректно

https://github.com/vbondarevsky/Connector/blob/322ab11cf29701d68935ee6f9ab9dbc6949436af/src/CommonModules/%D0%9A%D0%BE%D0%BD%D0%BD%D0%B5%D0%BA%D1%82%D0%BE%D1%80HTTP/Ext/Module.bsl#L1775

vbondarevsky commented 4 years ago

В старых версиях платформы нет функции СтрРазделить. Видимо проблему нужно искать в вашей реализации этой функции @leemuar

vbondarevsky commented 4 years ago

Пока закрываю

leemuar commented 4 years ago

Да, действительно, я ошибся. Я думал в нашей платформенной СтрЗаменить() ошибка, оказалось что у нас есть своя функция СтрЗаменить в глобальном модуле, это ее поведение неправильное.