Безопасность и кросс-домен с помощью ASP.NET MVC JsonResult и jQuery

Я использую asp.net MVC для разработки приложения, которое будет взаимодействовать с ajax. У меня есть методы JsonResult в контроллере, возвращающие мои сериализованные данные json. Так, например, когда делается запрос к http://somesite.com/findwidgets/, mvc сериализует данные как json и отправляет их обратно.

Я использую jQuery на стороне клиента для обработки запросов ajax, а затем для управления результатами. У меня нет проблем с получением данных, но я обнаружил, что могу делать запросы к http://somesite.com/findwidgets/ из адресной строки браузера, и он вернет данные json в виде загрузки.

Кроме того, как я могу гарантировать, что другие не могут просто делать запросы и получать данные с помощью http://somesite.com/findwidgets/?

Подходит ли здесь кросс-домен или это связано с другими проблемами безопасности?

Спасибо

Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
1
0
2 793
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Also, how do i ensure that others cannot simply make requests and grab data using http://somesite.com/findwidgets/ ?

Проблема, которую вы описываете, - это та же проблема, о которой люди говорят, когда спрашивают, как они могут предотвратить публикацию сообщений в их форме с другого сайта. Единственный разумный ответ, который я видел, - это использовать некоторый тип системы ключей сеанса, в которой ключ генерируется для каждого запроса, и каждый последующий запрос должен передавать ранее сгенерированный ключ для проверки. Запросу, поступившему без ключа или с недействительным ключом, отказано в доступе.

i have found that i can make requests to http://somesite.com/findwidgets/ from the address bar of the browser and it will return the json data as a download.

Это связано с тем, что JSON не распознается как текстовый MIME-тип, и браузеры будут отображать только текстовые MIME-типы непосредственно в браузере. Все остальное будет предлагаться как загрузка, а не отображаться в строке.

Спасибо за ваш пост ... Знаете ли вы в рамках MVC для .net, есть ли способ, чтобы метод JsonResult не отвечал на запросы, сделанные через адресную строку?

Jeremy 23.01.2009 01:25

Вы захотите использовать атрибут AcceptVerbsAttribute в своем действии. Обычно вы не хотите разрешать получение запросов к действию. Например, в ваше действие добавьте следующее: [AcceptVerbs (HttpVerbs.Post)] Это гарантирует, что только запросы POST смогут вызывать действие.

Dale Ragan 23.01.2009 09:36

рассмотрите также возможность проверки хоста запроса и ограничьте его текущим доменом.

Также вы можете использовать свойство IsAjaxRequest () контроллера (если оно false - например, вернуть нулевой результат). Чтобы предотвратить публикацию / получение данных с других сайтов, вы можете проверить свойство Request.UrlReferrer (но браузер может лгать об этом).

Другие вопросы по теме