Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

2 Страницы<12
Опции
К последнему сообщению К первому непрочитанному
Offline Степан З  
#11 Оставлено : 22 октября 2018 г. 16:39:21(UTC)
Степан З

Статус: Новичок

Группы: Участники
Зарегистрирован: 31.07.2018(UTC)
Сообщений: 9
Российская Федерация
Откуда: Екб

Поблагодарили: 1 раз в 1 постах
Автор: Степан З Перейти к цитате
Никаких преобразований line breaks to #xA на выходе нет.
Это я про innerText

Offline two_oceans  
#12 Оставлено : 23 октября 2018 г. 6:49:14(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,602
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 393 раз в 366 постах
Цитата:
Цитата:
Выдержка из стандарта канонизации XML:
Line breaks normalized to #xA on input, before parsing

При этом дальше идут примеры, где они в innerText-е меняют \r на &#xD; и не меняют \n, а наоборот &#xA; меняют на \n! В атрибутах все спецсимволы меняют на последовательность &#..;.
Я так понимаю, когда в стандарте написано #xA это просто одиночный символ с кодом 10, то что Вы называете \n ведь в цитате не написано перед #xA амперсанда и в конце точки с запятой, как могло быть: &#xA; Таким образом, все правильно последовательность &#xA; меняют на одиночный символ #xA (он же \n) и не меняют \n.
Цитата:
https://www.w3.org/TR/2000/WD-xml-2e-20000814
2.11 End-of-Line Handling

XML parsed entities are often stored in computer files which, for editing convenience, are organized into lines. These lines are typically separated by some combination of the characters carriage-return (#xD) and line-feed (#xA).

[E86]To simplify the tasks of applications , an XML processor must normalize line breaks in parsed entities to #xA either by translating the two-character sequence #xD #xA and any #xD that is not followed by #xA to #xA on input before parsing, or by using some other method such that the characters passed to the application are the same as if it did this translation.
То есть по основному стандарту XML процессор должен выполнить замену: \r\n заменяется на \n, "одиночные" \r без непосредственно следующего \n заменяются на \n.
Цитата:
Фишка в том, что процессы нормализации и канонизации — это разные вещи.
Верно, а еще дело в том, что при выборе фрагмента xpath может не выбрать ни одного перевода строки вообще - все в одну строку и по идее именно этот вариант должен передаваться на каноникализацию. А мы выбираем фрагмент для подписи непонятно каким образом и у нас во фрагменте оказываются переводы строк которых вообще в принципе быть не должно во фрагменте.

Отредактировано пользователем 23 октября 2018 г. 7:01:30(UTC)  | Причина: Не указана

Offline Степан З  
#13 Оставлено : 23 октября 2018 г. 9:45:44(UTC)
Степан З

Статус: Новичок

Группы: Участники
Зарегистрирован: 31.07.2018(UTC)
Сообщений: 9
Российская Федерация
Откуда: Екб

Поблагодарили: 1 раз в 1 постах
Автор: two_oceans Перейти к цитате
Я так понимаю, когда в стандарте написано #xA это просто одиночный символ с кодом 10

Ну, кстати, да. Я сначала за управляющую последовательность это принял.

Автор: two_oceans Перейти к цитате
по основному стандарту XML процессор должен выполнить замену

Но, видимо, не обязан. И в том же .Net-е разные механизмы (XmlDocument, XmlReader и XmlTextReader) ведут себя по-разному.
А вот при формировании подписи, да, надо обязательно в канонизацию передавать данные из нормализирующей читалки (об этом есть в стандарте XMLDSign пункт 7.1). Я же использовал XmlDocument, а надо было использовать, например, XmlReader.

P.S.
Автор: Степан З Перейти к цитате

В потрохах .Net есть код, который при проверке в методе SignedXml.CheckSignature() подменяет \r на \n, а \r\n на \n — они это называют нормализацией документа. На самом деле, просто прогоняет документ через XmlTextReader. Зачем? Я не понимаю.

Кажется, что тот самый пункт 7.1 отвечает на этот вопрос. Но мне не понятно пока, почему они эту функциональность в XmlDsigExcC14NTransform не втащили...
Offline two_oceans  
#14 Оставлено : 23 октября 2018 г. 11:58:13(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,602
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 393 раз в 366 постах
Автор: Степан З Перейти к цитате
Но, видимо, не обязан.
"or by using some other method such that the characters passed to the application are the same as if it did this translation" Похоже на то, что он может выполнять это при передаче данных куда-то еще. Фиктивная такая замена, потому и поведение разное. А если мы вырываем у него фрагмент не предусмотренным способом эта замена не срабатывает.
Цитата:
Но мне не понятно пока, почему они эту функциональность в XmlDsigExcC14NTransform не втащили...
Вероятно, потому что в оригинале exclusive С14N трансформ хоть и разработан с прицелом на стандарт xmldsig, но все же не является его частью. Поэтому в трансформе предусмотрена замена символов \r на &#xD; хотя при нормализации с учетом пункта 7.1 xmldsig их вообще не должно остаться к моменту применения трансформа. По крайней мере, в фрагменте выбранном способом, при котором срабатывает фиктивная замена на \n.

Offline Степан З  
#15 Оставлено : 23 октября 2018 г. 14:29:37(UTC)
Степан З

Статус: Новичок

Группы: Участники
Зарегистрирован: 31.07.2018(UTC)
Сообщений: 9
Российская Федерация
Откуда: Екб

Поблагодарили: 1 раз в 1 постах
Автор: two_oceans Перейти к цитате
Вероятно, потому что в оригинале exclusive С14N трансформ хоть и разработан с прицелом на стандарт xmldsig, но все же не является его частью.

Видимо, да. Тогда вопрос к наименованию этого класса. Делает только exclusive С14N transform — называли бы соответственно и без лишних префиксов. Но это, похоже, уже другая история )
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
2 Страницы<12
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.