Там действительно нет эффективного решения.Если ваш JSON доступен через браузер, то он одинаково доступен и для других сайтов.Для веб-сервера запрос, исходящий из браузера или другого сервера, практически неотличим от заголовков.Как прокомментировал ILMV, рефереры (и другие заголовки) могут быть сфальсифицированы.Они ведь самоотчеты.
Безопасность никогда не бывает идеальной.Достаточно решительный человек может преодолеть любые меры безопасности на месте, но цель безопасности состоит в том, чтобы создать достаточно высокий сдерживающий фактор, от которого непрофессионалы и / или большинство людей будут отговаривать выделять время и ресурсы, необходимые для компрометации безопасности.
Учитывая эту мысль, вы можете создать барьер входа достаточно высоко, чтобы другие сайты, вероятно, не потрудились бы делать запросы с установленными барьерами входа.Вы можете сгенерировать одноразовые токены, необходимые для получения данных JSON.Как только токен используется для получения данных JSON, токен впоследствии становится недействительным.Чтобы получить токен, необходимо запросить веб-страницу с токеном, встроенным в страницу в javascript, который затем помещается в вызов ajax для данных json.Объедините это с токенами с истекающим временем и достаточным запутыванием в javascript, и вы создали достаточно высокий барьер.
Просто помните, что это невозможно обойти.Другой веб-сайт может извлечь токен из javascript и / или перехватить вызов ajax и захватить данные в нескольких точках.