Защита веб-сервисов - PullRequest
       17

Защита веб-сервисов

5 голосов
/ 17 декабря 2009

У меня есть проект WebService, который мы создали для предоставления некоторых методов нашим клиентам (особенно если они вызывают один из методов, который вызовет событие на наших серверах), которые они могут вызывать в своих собственных проектах C # ( некоторые клиенты будут делать приложения для веб-форм, а некоторые будут делать это на своем внутреннем сайте).

Из-за характера метода одним из параметров является строка, которая определяет, кто является клиентом (чтобы мы могли инициировать соответствующее событие), и я не слишком уверен, что этого достаточно, чтобы люди не могли отправлять случайные данные. пока они не наткнутся на один из действительных идентификаторов.

Каков стандартный способ защиты чего-то подобного от злоупотреблений? В большинстве учебных пособий, которые я нахожу, ничего не говорится о том, как обеспечить их безопасность. Спасибо!

Ответы [ 6 ]

3 голосов
/ 17 декабря 2009

Даниэль Вассалло прав. Вы захотите использовать сертификат X509, чтобы убедиться, что человек, вызывающий службу, является законным. Однако это значительно повышает сложность решения. Вы захотите использовать Microsoft WSE и, вероятно, приобретенный сторонний компонент.

Без этого вы можете использовать переданное имя пользователя и пароль. Однако для хэширования информации, основанной на дате, времени и т. Д., Необходим некоторый общий алгоритм, без хеша вы можете открыть себя взломать гораздо больше, чем нет. Даже при использовании SSL атака по словарю может в конечном итоге обернуться.

2 голосов
/ 17 декабря 2009
  1. Использование имени пользователя и пароля должно быть хорошо.
  2. Если вам известен IP-адрес клиентов компьютеров, которые будут вызывать веб-сервис, ограничьте URL-адрес только известными IP-адресами.
1 голос
/ 17 декабря 2009

Возможно, вы захотите проверить протокол WS-Security .

Этот протокол содержит спецификации того, как можно обеспечить целостность и конфиденциальность при обмене сообщениями Web-сервисов.

0 голосов
/ 17 декабря 2009

Это эффективный пароль ... за исключением ожидания его имени пользователя и пароля в одном поле.

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

Это по трем деловым причинам:

  • Идентификация учетной записи может быть однозначно обсуждена между людьми, которые должны знать личность пользователя (имя пользователя ?!), но не иметь пароль

  • По закону проще всего доказать несанкционированный доступ, если это когда-либо понадобится, если протокол доступа является общепринятым, потому что тогда более вероятно применение прецедентного права, а ситуация с большей вероятностью будет четкой (и привести к меньшим законным счетам!). Отсутствие имени пользователя в публичной сети для коммерческой системы не является неслыханным делом, и в некоторых системах это хорошая идея (но, как правило, это просто не ... хорошая идея).

  • Рекомендации по передовой практике в области безопасности в целом и конкретных процессов предполагают, что вы, по возможности, используете имя пользователя и пароль, а не комбинированное поле. Это может затруднить разработку консенсусной политики в будущем.

Пароль (или часть пароля, если вы используете комбинированную строку имени пользователя / пароля) будет зависеть от всех обычных рекомендаций по безопасности, касающихся политики изменения, неразглашения, сложности и длины. Я предлагаю вам также использовать SSL и WS-Security, чтобы быть как можно более обычным в области безопасности. Возможно, вам нужно шифрование по проводам.

EDIT

Я хотел написать TLS, а не SSL.

EDIT

Извините, нет, я имел в виду TLS или WS-Security.

0 голосов
/ 17 декабря 2009

как часть протокола вы можете отправить случайное число клиенту. Затем клиент солит идентификатор с этим случайным числом и хэширует объединенное значение. Вы можете вернуть это объединенное значение обратно на сервер.

Затем сервер вычисляет тот же хэш идентификатора + номер и проверяет два значения.

0 голосов
/ 17 декабря 2009

Аутентификация обычно выполняется с использованием заголовков SOAP, см. эту страницу MSDN.

В этой статье приведен пример, хотя он довольно старый.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...