Первое, что вам нужно спросить себя: «Что кто-то может сделать с вашей службой WCF, если он подключил своего собственного настроенного клиента?» Посмотрите на все функции, предоставляемые через WCF, и предположите, что к ним можно получить доступ по желанию. У вас нет абсолютно никакого контроля над клиентом, и у вас никогда не будет этой способности.
HTTPS - это прекрасно, чертовски жаль, что вы вынуждены быть уязвимыми для OWASP A9: недостаточная защита транспортного уровня . Если бы это было до меня, я бы переехал на другой хост, который заботился о безопасности. Если вы выкидываете имена пользователей и пароли по сети, то вы подвергаете своих пользователей опасности.
Одна из самых больших проблем, с которыми я столкнулся при работе со службой WCF, заключается в том, что у них была выставлена функция executeQuery (). Разработчик, позволяющий клиенту создавать запросы для выполнения сервером. Этот подход в корне ошибочен, поскольку вы просто передаете свою базу данных злоумышленнику. Этот тип уязвимости не является SQL-инъекцией, он подпадает под CWE-602: Обеспечение безопасности на стороне клиента .
В том же ключе, что и CWE-602: OWASP A4: небезопасные прямые ссылки на объекты . Может ли злоумышленник обмануть вашу службу WCF, заставив ее думать, что это другой пользователь, предоставив другой идентификатор пользователя? Вы доверяете клиенту, чтобы сказать правду?
Следующая классификация уязвимостей, которую вы должны принять во внимание, - OWASP A1: Инъекция , также известная как "Taint and Sink". Например, если вы выставляете функцию, в которой один из ее параметров используется в CreateProcess()
, который вызывает cmd.exe
. Этот параметр может контролироваться злоумышленником, и там для этой переменной «испорчен», вызов CreateProcess()
является «стоком». По этим направлениям существует много типов уязвимостей, включая, но не ограничиваясь; SQL-инъекция, LDAP-инъекция, XPATH-инъекция. Эти типы уязвимостей влияют на все веб-приложений.