Silverlight и WCF RIA, обеспечивающие сервисные звонки.Я что-то пропустил? - PullRequest
1 голос
/ 23 декабря 2011

В отношении вызовов к службе WCF существует концепция безопасности, которую я не могу понять.

Я создал образец решения Silverlight и включил WCF RIA.
У меня есть операция вызова (или любая из автоматически сгенерированных CRUD в этом отношении), которые я аннотировал с помощью [Требуется аутентификация ()]:

[RequiresAuthentication()]
[Invoke]
public void DeleteResource(string id)
{
    //...
}

Затем я изменил web.config, чтобы включить аутентификацию форм:

<system.web>
  <httpModules>...</httpModules>
  <compilation>...</compilation>
  <authentication mode="Forms" />    
</system.web>

Теперь только аутентифицированные пользователи могут вызывать этот метод. Так что в клиенте мне нужно аутентифицироваться:

FormsAuthentication auth = new FormsAuthentication();
auth.Login(textBoxUsername.Text, textBoxPassword.Text);

После успешного входа в систему можно выполнять вызовы метода.

Глядя на Фиддлера через этот процесс, я вижу две вещи:

  1. Set-Cookie: .ASPXAUTH = F8FFB8B ..... (с шага входа в систему)
  2. http://localhost:1107/.../DomainService.svc/binary/DeleteResource (при вызове метода)

Таким образом, злоумышленник может сделать следующее:

  1. Войдите в мое приложение как обычный пользователь (он зарегистрировался и получил учетные данные).
  2. Откройте Fiddler во время работы с приложением и скопируйте cookie и URL, которые я только что упомянул.
  3. Создайте HTTP-вызов для этого URL с помощью файла cookie (например, с помощью веб-клиента C #) и начните удаление ресурсов.

Если это возможно, как я могу заблокировать эту дыру в безопасности?
А если нет, что мешает пользователю сделать это?

1 Ответ

0 голосов
/ 10 января 2012

Если честно, я не вижу здесь дыры в безопасности:

  1. Если пользователь смог войти в систему, он, как я полагаю, уполномочен на выполнение упомянутой операции.
  2. Аутентификация! = Авторизация.Вы должны не только проверять, аутентифицирован ли пользователь, но и авторизован ли он для выполнения какой-либо одной операции (конечно, на стороне службы).С точки зрения безопасности не должно быть никакой разницы между операцией вызова из браузера и использованием «вручную» подготовленного запроса - авторизация должна выполняться на уровне обслуживания при КАЖДОМ вызове (вы никогда не должны доверять клиенту - т.е. WebBrowser по самой причинеВы разместили этот вопрос).Если пользователь пытается что-то, на что у него нет прав доступа, должна произойти ошибка авторизации.
  3. В файле cookie аутентификации должно быть установлено время истечения аутентификации (например, в течение 30 минут).
...