Безопасность важна для веб-служб. Однако ни спецификации XML-RPC, ни SOAP не содержат никаких явных требований к безопасности или аутентификации.
Существует три специфических проблемы безопасности с веб-службами:
- Kонфиденциальность
- Аутентификация
- Сетевая безопасность
Конфиденциальность
Если клиент отправляет XML-запрос на сервер, можем ли мы обеспечить конфиденциальность связи?
Ответ лежит здесь:
- XML-RPC и SOAP запускаются в первую очередь поверх HTTP.
- HTTP поддерживает протокол Secure Socketes Layer (SSL).
- Связь может быть зашифрована через SSL.
- SSL является проверенной технологией и широко используется.
Одна веб-служба может состоять из цепочки приложений. Например, один большой сервис может связать службы трех других приложений. В этом случае SSL не является адекватным; сообщения должны быть зашифрованы в каждом узле вдоль пути службы, и каждый узел представляет потенциальную слабое звено в цепочке. В настоящее время не существует согласованного решения этой проблемы, но одним из перспективных решений является стандарт шифрования XML W3C. Этот стандарт обеспечивает основу для шифрования и дешифрования целых документов XML или только частей XML-документа. Вы можете проверить это на http://www.w3.org/Encryption
Аутентификация
Если клиент подключается к веб-службе, как мы идентифицируем пользователя? Разрешен ли пользователь пользоваться услугой?
Можно рассмотреть следующие варианты, но нет четкого консенсуса по сильной схеме аутентификации.
- HTTP включает встроенную поддержку аутентификации Basic и Digest, поэтому службы могут быть защищены таким же образом, как и в настоящее время защищенные HTML-документы.
- Цифровая подпись SOAP (SOAP-DSIG) использует криптографию с открытым ключом для цифровой подписи сообщений SOAP. Он позволяет клиенту или серверу проверять личность другой стороны. Проверьте его на http://www.w3.org/TR/SOAP-dsig.
- Организация по внедрению стандартов структурированной информации (OASIS) работает над языком разметки безопасности (SAML).
Сетевая безопасность
В настоящее время нет легкого ответа на эту проблему, и это стало предметом многочисленных дискуссий. Пока, если вы действительно намерены фильтровать сообщения SOAP или XML-RPC, одна из возможностей - отфильтровать все HTTP-запросы POST, которые устанавливают их тип контента в text/xml.
Другой альтернативой является фильтрация атрибута заголовка SOAPAction HTTP. Производители брандмауэра также в настоящее время разрабатывают инструменты, явно предназначенные для фильтрации трафика веб-сервисов.