Я думаю, что есть безопасный способ реализации анти-подделка маркеров без сервера сгенерированной страницы:
- создать контроллер или веб-метод апите, который устанавливает HTTP только печенье с вашей анти-подделка маркеров значения и возвращает значение токена анти-подделки (как JSON). Существует общедоступный метод AntiForgery.GetTokens(), который вызывается Html.AntiForgeryToken(). Используйте этот метод для чтения значения токена в коде C#.
- Вызовите контроллер или веб-метод api (в шаге 1) из javascript в приложении phonegap и возьмите возвращаемый токен анти-подделки и добавьте его в форму с помощью javascript (используйте скрытое поле ввода с именем _RequstVerificationToken).
- Отправьте форму методу, указанному в [ValidateAntiForgeryToken], и она должна быть проверена соответствующим образом.
Microsoft предоставила очень похожий пример реализации here (см. Раздел «Анти-CSRF и AJAX»).
На первый взгляд это может показаться небезопасным, поскольку у вас есть метод контроллера, который устанавливает и возвращает токен анти-подделки, но веб-браузеры применяют same origin security policy, поэтому атаки XSRF не должны быть возможны.
Поскольку PhoneGap использует локальные файлы, не подлежит к same origin policy (see here), поэтому он будет иметь возможность сделать AJAX запросы в любой домен, указанный в вашем config.xml (see <access origin="..." /> here)
Hi Дарин. Спасибо за ваш быстрый ответ. Проблема в том, что если я хочу развернуть приложение в PhoneGap, я не могу использовать ASP.NET MVC. Вы знаете, как реализовать эту функциональность, не полагаясь на сервер для генерации HTML? –
Вы не можете реализовать эту функцию без сценария на стороне сервера. Это не имеет никакого смысла. Весь смысл токена antiforgery - иметь сервер, который генерирует этот токен. –
ОК. У меня есть идея, что я создаю простую HTML-страницу, которая сделает запрос AJAX некоторым методом на ASP.NET WebAPI, который будет генерировать токен и возвращать его клиенту. Чем я могу использовать этот токен в следующем запросе к WebAPI? Что-то вроде того. Как вы думаете ? –