Безопасность и междоменный домен с ASP.NET MVC JsonResult и jQuery

StackOverflow https://stackoverflow.com/questions/470011

Вопрос

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

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

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

Является ли междоменная тема подходящей темой или речь идет о других проблемах безопасности?

Спасибо

Это было полезно?

Решение

  

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

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

  

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top