«Я думаю, что реферером будет metromapper.org, так как этот домен вызывает скрипт yourmapper.com после загрузки»
Это на самом деле неверно. Во-первых, вы никогда не должны полагаться на HTTP_REFERER, потому что это добровольный параметр, передаваемый большинством (не всеми) браузерами, и его можно легко подделать. Я могу отправлять запросы на ваш сайт, используя CURL, чтобы это выглядело так, как если бы я хотел, чтобы реферер был whitehouse.gov. Там нет никаких мер безопасности.
Это, как говорится. Браузер устанавливает этот параметр для страницы, которая направляла пользователя на текущую загруженную страницу. Не сценарий. Поэтому причина, по которой вы видите результат, кроется в том, что пользователь ссылался на metromapper.org по ссылке на stackoverflow.com
Наконец, давайте перейдем к сочной части. Вы используете JS для кодирования вещей в браузере. Это нормально, и с этим абсолютно никаких проблем. Но вы должны помнить, что JS с открытым исходным кодом. Так что люди могут (и будут) связываться с вашим кодом, чтобы играть с вашим API только потому, что они могут. Что, как говорится. Лучше всего, вероятно, передать URL-адрес сайта вместе с запросом в вашем JS API. Это лучший способ «отследить», какие сайты используют ваш скрипт. Вы можете проверить серверную часть, чтобы убедиться, что URL был передан. Это помешает пользователям изменять ваш API, чтобы удалить бит, который отправляет их URL на ваш сервер. Однако это не помешает им изменить его для использования чужого или случайного незарегистрированного URL в качестве параметра.
Конечно, вы можете создать PHP API, который они запускают на своем сервере. JS API соединяется с PHP API, а PHP API закодирован Zend-Guard (или какой-либо другой системой кода защиты исходного кода), но все равно найдутся люди, которые декодируют файл, чтобы вернуться к вашему источнику и связываться с вами. Конечно, было бы гораздо меньше людей, способных сделать это, и средний пользователь просто предпочел бы использовать ваш API как есть. Кроме того, у вас также есть проблема с людьми, которые не могут запустить ваш API на серверах, которые не имеют возможности запускать закодированные файлы PHP.
В конце концов, вам нужно определить уровень требуемой безопасности и аутентификации, но, поскольку ваш API работает в JavaScript в браузере клиента, очень мало доступно, кроме запутывания.
Я бы сказал, что лучшим вариантом будет просто зацепить ваш код JS URL текущей страницы и отправить его с запросом API. Оттуда ваш сервер может обработать URL, чтобы получить корневой домен и любую другую информацию, которую вы хотите сохранить.
Если вы хотите запретить людям «подделывать» запросы на URL-адреса веб-сайтов других пользователей, вы можете реализовать PHP API, который устанавливается на сервер пользователя в определенном месте. Например http://www.domain.com/my-app-name.php
Все вызовы JS API должны проходить через этот скрипт. Когда пользователь загружает ваш API, он должен ввести URL своего веб-сайта и некоторую другую информацию. Ваша система генерирует «ключ» и вставляет его в сценарий, прежде чем упаковать его для загрузки. Этот ключ действителен для их домена и используется для кодирования всей передачи в / из вашего API с использованием, скажем, blowfish или другого алгоритма двустороннего шифрования. Таким образом, когда ваш API получает запрос от своего PHP API-файла, вы получаете URL страницы, с которой был сделан запрос, закодированный ключом, который есть только у вас и у администратора этого сайта. Таким образом, запрос выглядит примерно так: metromapper.org/api?site=[url_encoded_page_address]&req=[encrypted_request]
Ваш сервер использует URL-адрес страницы, чтобы определить, какой ключ следует использовать для расшифровки данных. Затем он расшифровывает данные. Если данные повреждены или не расшифрованы в соответствии с вашими ожиданиями, это неверный запрос, и вы должны просто выйти и ничего не возвращать.
Причина, по которой я предлагаю использовать файл PHP для шифрования, а не записывать шифрование в JS, заключается в том, что вы не хотите обременять клиента (каждого посетителя сайта) нагрузкой шифрования / дешифрования, и PHP собирается справиться с этим.это намного быстрее, чем JS, поскольку есть библиотеки, созданные для выполнения этих задач.
В любом случае, вы должны быть на правильном пути, чтобы иметь возможность отслеживать и проверять запросы на разные сайты по отношению к вашимAPI.