Отправка потенциально конфиденциальных данных через XML в C # - PullRequest
2 голосов
/ 30 ноября 2011

Какова наилучшая практика отправки потенциально конфиденциальных данных в веб-службу через XML в C #?

Если бы я знал, что данные, с которыми я буду работать, были совершенно тривиальными, я был бы склонен использовать XmlSerialization, но тот факт, что для правильной работы сериализации требуется доступ к диску, меня беспокоит - похоже, существует вероятность сохранения конфиденциальных данных на диске во временных файлах.

Так что, если не XmlSerialization, то каков наилучший способидти?

Ответы [ 3 ]

3 голосов
/ 30 ноября 2011

При использовании XmlSerializer создаваемые временные файлы содержат только информацию о типе - то есть временные сборки, представляющие тип объектов передачи данных.Они не содержат фактических данных самих созданных объектов.Информация о типе может быть конфиденциальной, но, вероятно, нет.

Угрозы, упомянутые в ссылках в комментариях выше, касаются возможности внедрения вредоносного кода злоумышленником, перезаписывающим эти созданные сборки- не раскрытие данных.

На самом деле WCF будет использовать DataContractSerializer по умолчанию, а не XmlSerializer.Эта ссылка

http://msdn.microsoft.com/en-us/library/ms733135.aspx

Объясняет, как запретить DataContractSerializer загружать вредоносные типы, создав список известных типов (из строго именованных типов) в файле конфигурации илив коде.Тогда проблема сводится к обеспечению безопасности вашего конфигурационного файла ...

Могу ли я остановиться сейчас; o)

2 голосов
/ 30 ноября 2011

Использовать WCF с привязкой, такой как WsHttpBinding, настроенной для TLS.

Редактировать

DataContractSerializer, который является механизмом сериализации по умолчанию, используемым в WCF, не требует временных сборок сериализации, подобных XmlSerializer.

Если вы пользуетесь веб-службой в целом, я предлагаю использовать прокси WCF для этого.Если вас интересует только сериализация и, возможно, вы уже написали все SOAP для вашего запроса и т. Д., То вы можете без проблем использовать DataContractSerializer.

При этом важно отметить, что временные сборки сериализации не хранят данные, они просто являются оптимизацией для ускорения синтаксического анализа XML.Существует вектор атаки для замены сборок, но для этого прежде всего требуется доступ к серверу, и, если у вас есть такой доступ, конфиденциальные данные могут быть получены другими способами.

1 голос
/ 30 ноября 2011

похоже, что существует возможность сохранения конфиденциальных данных на диске во временных файлах.

Это может произойти на сервере или клиенте.
Но ваши данные в любом случае будут присутствовать в незашифрованном виде на обоих концах.

Так что вам действительно нужно переосмыслить, что здесь означает безопасность. От каких атак вы хотите защититься?

...