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

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-типы непосредственно в браузере. Все остальное будет предлагаться как загрузка, а не отображаться в строке.
Вы захотите использовать атрибут AcceptVerbsAttribute в своем действии. Обычно вы не хотите разрешать получение запросов к действию. Например, в ваше действие добавьте следующее: [AcceptVerbs (HttpVerbs.Post)] Это гарантирует, что только запросы POST смогут вызывать действие.
рассмотрите также возможность проверки хоста запроса и ограничьте его текущим доменом.
Также вы можете использовать свойство IsAjaxRequest () контроллера (если оно false - например, вернуть нулевой результат). Чтобы предотвратить публикацию / получение данных с других сайтов, вы можете проверить свойство Request.UrlReferrer (но браузер может лгать об этом).
Спасибо за ваш пост ... Знаете ли вы в рамках MVC для .net, есть ли способ, чтобы метод JsonResult не отвечал на запросы, сделанные через адресную строку?