В отношении вызовов к службе 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);
После успешного входа в систему можно выполнять вызовы метода.
Глядя на Фиддлера через этот процесс, я вижу две вещи:
- Set-Cookie: .ASPXAUTH = F8FFB8B ..... (с шага входа в систему)
- http://localhost:1107/.../DomainService.svc/binary/DeleteResource (при вызове метода)
Таким образом, злоумышленник может сделать следующее:
- Войдите в мое приложение как обычный пользователь (он зарегистрировался и получил учетные данные).
- Откройте Fiddler во время работы с приложением и скопируйте cookie и URL, которые я только что упомянул.
- Создайте HTTP-вызов для этого URL с помощью файла cookie (например, с помощью веб-клиента C #) и начните удаление ресурсов.
Если это возможно, как я могу заблокировать эту дыру в безопасности?
А если нет, что мешает пользователю сделать это?