@ Шафи имеет хорошую идею, просто нужно немного подправить. Мы фокусируемся на видимой части вызова API, которая является ключом API. Это видно в URL и говорит API , кто запрашивает данные. Вместо того, чтобы пытаться не дать другим украсть этот ключ и выполнить свой собственный вызов cURL с доменом, из которого он его перехватил, мы можем просто добавить еще один ключ в микс, этот невидим для этих перехватчиков. Я не говорю о том, чтобы прекратить проверку того, откуда поступает запрос, это все еще хороший способ выкинуть недействительные запросы в самом начале сценария, но с помощью второго ключа вы гарантируете, что только тот, кто запрашивает данные, действительно знает, как получить данные (вы доверяете им, чтобы они никому не передавались).
Итак, когда пользователь регистрируется на ключ, вы фактически назначаете ему два разных ключа.
API_KEY - Открытый ключ, который соединяет вас с вашим доменом. Система ищет домен и предоставленный ключ, чтобы найти следующий ключ.
MCRYPT_KEY - это ключ, который будет использоваться для фактического шифрования этих данных через Mcrypt. Так как это зашифрованные данные, только запросчик и сервер будут знать, что это такое. Ключ используется для шифрования данных и отправки зашифрованного ввода с вашим ключом API на сервер, который находит ключ, необходимый для расшифровки этого ввода, с помощью предоставленного ключа API и домена (и IP). Если они не зашифровали данные с помощью правильного ключа, то дешифрование с помощью правильного ключа вернет бессмысленность, а вызов json_decode()
вернет NULL, что позволит сценарию просто вернуть ответ «invalid_input».
В конечном счете, с помощью этого метода, нам даже нужно проверить, откуда (домен / IP) поступает запрос? Использование этого метода действительно сводится к тому, что пользователи API не передают свою пару ключей API / MCRYPT другим пользователям, подобно тому, как не передают ваше имя пользователя / пароль. Тем не менее, любой веб-сайт может легко зарегистрироваться, чтобы получить собственную пару ключей и использовать API. Также следует отметить, что API не будет даже возвращать что-либо полезное для своего сервера, если только пользователь на своем конце не войдет в систему, используя правильные имя пользователя и пароль, поэтому его конец уже будет иметь эту информацию. Единственное, что на самом деле возвращает наш сервер - это его адрес электронной почты после успешной проверки пользователя. Сказав это, нужно ли нам вообще использовать cURL? Не могли бы мы просто использовать file_get_contents('http://api.example.com/{$API_KEY}/{$MCRYPT_DATA}')
? Я понимаю, что задаю больше вопросов в своем ответе ...