Безопасность и междоменный домен с ASP.NET MVC JsonResult и jQuery
-
19-08-2019 - |
Вопрос
Я использую 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 (но браузер может лгать об этом). Р>