Предотвращение атак подделки межсайтовых запросов с помощью клиентского приложения Windows
Я разрабатываю веб-приложение web api2
,
Моим клиентским приложением является Windows-приложение, разработанное на C#, .net 4.0. Клиентское приложение отправляет некоторые данные Json в приложение web api, и приложение сохраняет данные в базе данных.
Теперь проблема заключается в отправке запроса другим методом, кроме моего приложения, и отправке данных дампа на сервер. У меня есть аутентификация на сервере, но этого недостаточно, мне нужно несколько токенов для решения этой проблемы.
После некоторых поисков я нахожу эту статью и читаю ее, но клиент - это веб-приложение. Могу ли я использовать этот метод в моем клиентском приложении Windows? Как?
2 ответа
Итог: вам не нужно.
По определению, CSRF- атаки могут затрагивать только клиентские приложения, которые совместно используют файлы cookie в разных доменах. например, если вы посещаете www.bank.com
с вашим браузером, а затем откройте другую вкладку, чтобы www.evil.com
, если www.bank.com
не защищает от CSRF тогда www.evil.com
может быть в состоянии отправить форму отправки в www.bank.com
во время входа в систему, а затем перевести деньги, подделав запрос form
"s action
URL на странице перевода денег.
Если ваш клиент является приложением Windows, в HTTP-клиенте не должно быть файлов cookie, хранящихся для какой-либо другой службы, кроме вашего веб-API.
Обратите внимание, что вышесказанное относится только к тем случаям, когда файлы cookie используются в качестве механизма управления сеансом (т. Е. Не Kerberos, NTLM, Basic Auth и т. Д.).
У меня есть аутентификация на сервере, но этого недостаточно
Этого должно быть достаточно, так как злоумышленник не может подделать HTTP-запрос к вашему API, который будет отправлен вместе с cookie-файлами жертвы, поскольку cookie-файлы разделены из-за различных экземпляров веб-клиентов. Очень похоже на то, что вы вошли в Google в Chrome, но затем получили доступ к Google в Firefox - вы не будете делиться тем же вошедшим в сеанс.
Конечно, защитите свой API с помощью HTTPS, чтобы информация была зашифрована во время передачи. Обратите внимание, что это не защищает от декомпиляции исходного кода, что нелегко предотвратить. В конце концов, вы не можете доверять клиентам, которые не находятся под вашим контролем. Вы можете усложнить, но не исключить возможность того, чтобы кто-то работал или изменял то, что отправляется в ваш API.
Межсайтовые токены против подделки являются формой аутентификации. Он проверяет подлинность клиента, отправляющего запрос: клиент должен посетить определенную страницу, чтобы получить токен с сервера, поэтому это не может быть любой клиент, который не посещал эту страницу, а некоторые просто отправляют случайные данные на этот сервер.
Цель аутентификации состоит в том, чтобы сервер аутентифицировал клиента (возможны и другие способы, но давайте пока об этом забудем). Вы настраиваете систему так, что другим очень трудно притвориться вашим приложением Windows Form. Обратите внимание, что это может быть очень сложно, но теоретически это всегда можно подделать. Таким образом, цель состоит в том, чтобы настроить аутентификацию таким образом, чтобы злоумышленник посчитал нецелесообразным запуск атаки.
Эту аутентификацию не следует смешивать с аутентификацией для проверки прав пользователя. Они разные. Приложение может предоставить пользовательский интерфейс для входа в систему, но вы не написали это приложение. Так что вам нужно аутентифицировать 2 вещи:
- запрос на самом деле приходит из вашего приложения, если это успешно, то
- человек-пользователь тот, кто он утверждает, что он есть, в противном случае
- отклонить запрос