Стратегия Encode/Decode в коммуникации между Front-End частью и сервисом
От: DreamWeaver ОАЭ  
Дата: 02.06.15 12:24
Оценка:
Работаю в комманде, разрабатываю сервис (web-api), который предоставляет некий JSON интерфейс.
Мои коллеги делают Front-End часть, которая использует мой web-api.

Front-End комманда хочет, чтобы все строки в получаемом ими от web-api JSON-е были HTML encoded.
Но при этом они не хотят мне отдавать encoded строки (в JSON-e вместе с POST запросами). Они мне присыдают plain text, который web-api интерпретирует как он есть (не подвергая его декодингу)

Давно уже хочу разобраться с этой темой, но не сильно удачно гуглится.
— Какой должна бысть стратегия использования encode/decode в подобной ситуации?
— Должен ли Back-end сервис вообще заботится о каком-то там специфичном для HTML decoding/encoding? Не лучше ли, чтобы back end сам решал что ему кодировать перед рендерингом в HTML и как?
— Буду благодарен за ссылки, в которых бы говорилось как это правильно делается (лучше на английском)
В сложившихся условиях ни то, ни другое не сулило ему никакой выгоды. Чего не скажешь о молчании...
Re: Стратегия Encode/Decode в коммуникации между Front-End частью и сервисом
От: hi_octane Беларусь  
Дата: 02.06.15 14:49
Оценка:
DW>Front-End комманда хочет, чтобы все строки в получаемом ими от web-api JSON-е были HTML encoded.
DW>Но при этом они не хотят мне отдавать encoded строки (в JSON-e вместе с POST запросами). Они мне присыдают plain text, который web-api интерпретирует как он есть (не подвергая его декодингу)

DW>Давно уже хочу разобраться с этой темой, но не сильно удачно гуглится.

DW> — Какой должна бысть стратегия использования encode/decode в подобной ситуации?

Наверное от того что там на back-end крутится зависит, но я бы покопал в сторону замещения стандартного сериализатора ViewModel->Json своим, умеющим две разные кодировки на приём и передачу.
Re: Стратегия Encode/Decode в коммуникации между Front-End частью и сервисом
От: iPrior Россия darkmonk9@gmail.com
Дата: 02.06.15 14:56
Оценка:
Здравствуйте, DreamWeaver, Вы писали:

DW>Работаю в комманде, разрабатываю сервис (web-api), который предоставляет некий JSON интерфейс.

DW>Мои коллеги делают Front-End часть, которая использует мой web-api.

DW>Front-End комманда хочет, чтобы все строки в получаемом ими от web-api JSON-е были HTML encoded.

DW>Но при этом они не хотят мне отдавать encoded строки (в JSON-e вместе с POST запросами). Они мне присыдают plain text, который web-api интерпретирует как он есть (не подвергая его декодингу)

DW>Давно уже хочу разобраться с этой темой, но не сильно удачно гуглится.

DW> — Какой должна бысть стратегия использования encode/decode в подобной ситуации?
DW> — Должен ли Back-end сервис вообще заботится о каком-то там специфичном для HTML decoding/encoding? Не лучше ли, чтобы back end сам решал что ему кодировать перед рендерингом в HTML и как?
DW> — Буду благодарен за ссылки, в которых бы говорилось как это правильно делается (лучше на английском)

Я бы реализовал стратегию обработки данных перед отправкой и получением (http://en.wikipedia.org/wiki/Strategy_pattern)
Скажем можно отправлять/принимать данные JSON (кодированные или нет), потом можно XML и так далее — гибко.
а-ля конвертер чтоль...

А признак, какую стратегию использовать, надо придумывать глядя на код =)
может параметром передавать, печенькой или в сессии хранить, привязанной к пользователю...
Re: Стратегия Encode/Decode в коммуникации между Front-End частью и сервисом
От: fin_81  
Дата: 02.06.15 15:28
Оценка:
Пишете вместе с фронт-энд командой протокол взаимодействия: какие методы и какие типы данных. И там решите, нужен ли вам зоопарк методов и типов данных. Насколько легко его реализовать, сопровождать, модифицировать.
Re: Стратегия Encode/Decode в коммуникации между Front-End частью и сервисом
От: GarryIV  
Дата: 02.06.15 15:29
Оценка:
Здравствуйте, DreamWeaver, Вы писали:

DW>Давно уже хочу разобраться с этой темой, но не сильно удачно гуглится.

DW> — Какой должна бысть стратегия использования encode/decode в подобной ситуации?
DW> — Должен ли Back-end сервис вообще заботится о каком-то там специфичном для HTML decoding/encoding? Не лучше ли, чтобы back end сам решал что ему кодировать перед рендерингом в HTML и как?
DW> — Буду благодарен за ссылки, в которых бы говорилось как это правильно делается (лучше на английском)

Есть accept и content type заголовки в запросе и ответе. Собственно через них можно договориваться о кодировании.
WBR, Igor Evgrafov
Re: Стратегия Encode/Decode в коммуникации между Front-End частью и сервисом
От: c-smile Канада http://terrainformatica.com
Дата: 02.06.15 16:24
Оценка: +4
Здравствуйте, DreamWeaver, Вы писали:

DW>Front-End комманда хочет, чтобы все строки в получаемом ими от web-api JSON-е были HTML encoded.


Это неправильно. Спроси их что они будут делать если их (front-end team) попросят сделать native client для mobile devices.
Re[2]: Стратегия Encode/Decode в коммуникации между Front-End частью и сервисом
От: DreamWeaver ОАЭ  
Дата: 02.06.15 16:45
Оценка: +1
Здравствуйте, c-smile, Вы писали:

CS>Здравствуйте, DreamWeaver, Вы писали:


DW>>Front-End комманда хочет, чтобы все строки в получаемом ими от web-api JSON-е были HTML encoded.


CS>Это неправильно. Спроси их что они будут делать если их (front-end team) попросят сделать native client для mobile devices.


приводил этот аргумент. Они мне ответили, что нужно делать декодинг в таком случае.

Еще они меня пытались убедить, что то, что я храню строки в БД как они есть(а не в HTML encoded виде) нарушает какую-то там безопасность.
Я их вроде своими словами переубедил (на примере, что может понадобится искать строки по длинне), но никак не могу найти толкового описания, что back-end сервису должно быть плевать что его использует FE написанный на AngularJS или на XAML для WP, и что для того чтобы защититься от script injection FrontEnd часть сама должна делать encoding.
В сложившихся условиях ни то, ни другое не сулило ему никакой выгоды. Чего не скажешь о молчании...
Re[3]: Стратегия Encode/Decode в коммуникации между Front-End частью и сервисом
От: c-smile Канада http://terrainformatica.com
Дата: 02.06.15 18:49
Оценка: 3 (1)
Здравствуйте, DreamWeaver, Вы писали:

DW>Здравствуйте, c-smile, Вы писали:


CS>>Здравствуйте, DreamWeaver, Вы писали:


DW>>>Front-End комманда хочет, чтобы все строки в получаемом ими от web-api JSON-е были HTML encoded.


CS>>Это неправильно. Спроси их что они будут делать если их (front-end team) попросят сделать native client для mobile devices.


DW>приводил этот аргумент. Они мне ответили, что нужно делать декодинг в таком случае.


А декодинг из чего собственно? XML и HTML escapement используют разные entity словари. Это первое.
И второе. JSON это всегда UTF encoding — т.е. unicode decoding всегда однозначное преобразование.
В HTML/XML encoding документа задается снаружи — http header либо meta/http-equiv.
Фрагмент html/xml (это то что они предлагают использовать) не несет encoding информации и в общем случае не может быть использован для хранения информации (persist) без указания внешнего encoding.
Т.е. строка "ФЫВА" в html/koi8 в html/CP437 будет соответствовать разным текстам.

Реально же HTML escapement нужно делать для всех non-ascii символов если собираетесь хранить и использовать escaped текст в разных locale и encodings.
Т.е. весь русский текст должен быть escaped тоже.

В любом случае это совершенно неоправданные затраты на умеличение длины передаваемых текстов.

Короче, скажи им чтобы не морочили голову ни себе ни другим.
Re: Стратегия Encode/Decode в коммуникации между Front-End частью и сервисом
От: Sinclair Россия https://github.com/evilguest/
Дата: 03.06.15 10:16
Оценка: +7
Здравствуйте, DreamWeaver, Вы писали:

DW>Front-End комманда хочет, чтобы все строки в получаемом ими от web-api JSON-е были HTML encoded.

Это бред. Просто посылайте их в сторону и всё. Конвертация данных, получаемых от API, в формат, удобный для отображения — ответственность клиента.
Безопасность хранения данных внутри бэк-енда — это вообще не их собачье дело. Она строго ортогональна безопасности отображения данных.

Разработчики клиента не имеют права полагаться на то, что кто-то сделает работу по предотвращению XSS за них.
Если у них возникает дискомфорт, то утешьте их тем, что в ответ снимете требование SQL-encodить все входящие данные в вашем web-api для предотвращения SQL Injection.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[3]: Стратегия Encode/Decode в коммуникации между Front-End частью и сервисом
От: Sharov Россия  
Дата: 03.06.15 10:24
Оценка:
Здравствуйте, DreamWeaver, Вы писали:

DW>Еще они меня пытались убедить, что то, что я храню строки в БД как они есть(а не в HTML encoded виде) нарушает какую-то там безопасность.

DW>Я их вроде своими словами переубедил (на примере, что может понадобится искать строки по длинне), но никак не могу найти толкового описания, что back-end сервису должно быть плевать что его использует FE написанный на AngularJS или на XAML для WP, и что для того чтобы защититься от script injection FrontEnd часть сама должна делать encoding.

Совершенно верно. А почему нельзя json сюда, json туда.
Кодом людям нужно помогать!
Re[3]: Стратегия Encode/Decode в коммуникации между Front-End частью и сервисом
От: baranovda Российская Империя  
Дата: 03.06.15 21:17
Оценка:
Здравствуйте, DreamWeaver, Вы писали:

DW>Здравствуйте, c-smile, Вы писали:

CS>>Это неправильно. Спроси их что они будут делать если их (front-end team) попросят сделать native client для mobile devices.

DW>приводил этот аргумент. Они мне ответили, что нужно делать декодинг в таком случае.


Я тоже считаю что это неправильно.
В качестве аргумента можно поискать реальные REST веб-сервисы, которые гоняют фрагменты HTML.
Я могу порекомендовать спецификацию международного медицинского стандарта HL7/FHIR (http://hl7.org/fhir) — в нем фрагменты HTML в JSON передаются как есть, без эскейпинга.
http://hl7.org/fhir/observation-example.json.html
http://hl7.org/fhir/observation-example-f004-hemoglobin.json.html
http://hl7.org/fhir/observation-example-f204-creatinine.json.html
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.