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