как предотвратить файл PHP_get_contents ()

одна из моих php-страниц возвращает данные следующим образом:

<?php //... echo "json string"; ?> 

но кто-то еще использует file_get_contents (), чтобы получить мои данные и использовать их на другом сайте.

может ли кто-нибудь сказать мне, что я могу сделать, чтобы этого не случилось.

я считаю, могу ли я получить доменное имя запроса, чтобы повторить что-то еще. Но я не знаю

функцию для получения имени домена запроса. Если запрос отправляется сервером, то

будет бесполезным. Мой английский плохой, чтобы выразить сомнения, пожалуйста, примиритесь.

Related of "как предотвратить файл PHP_get_contents ()"

вы также можете использовать сеансы. если где-то в вашем приложении, прежде чем пользователь получит данные json, вы начнете сеанс, а затем на этой странице, где вы выводите данные json, вы можете проверить переменную сеанса. таким образом, только пользователи, которые прошли страницу генератора сеансов, могут просматривать ваш вывод. предположим, что у вас есть страница A.php, которая генерирует сеанс. используйте этот код, прежде чем выводить что-либо на этой странице.

 session_start(); $_SESSION['approvedForJson'] = true; 

то на вашей странице, где вы выводите данные json, перед выводом чего-либо снова вызовите session_start (). начало вашего PHP-кода является хорошим местом для его вызова. то перед выдачей json-данных проверьте, существует ли переменная сеанса для утвержденных пользователей или нет.

 if ( isset($_SESSION['approvedForJson']) && $_SESSION['approvedForJson'] ) { echo "json data"; } else { // bad request } 

Вы можете использовать $ _SERVER ['REMOTE_ADDR'], чтобы получить адрес адреса клиента. Вы также можете проверить $ _SERVER ['HTTP_REFERER'] и заблокировать внешние запросы таким образом, но он менее надежный. Есть, вероятно, несколько других методов, в которых используется $ _SERVER, что вы можете попробовать.

Твоя борьба идет в гору. Я предполагаю, что ваш серверный процесс, который отвечает в json, расходуется через javascript в ваших браузерах пользователей … поэтому нет простого способа его зашифровать. Вы можете попробовать некоторые из методов, используемых для предотвращения xspf (см. http://en.wikipedia.org/wiki/Cross-site_request_forgery). Если вы разработали клиент для передачи по одному токену сеанса, который является uniq для каждого клиента, вы можете уменьшить некоторые проблемы. Но, скорее всего, тот, кто крадет ваши данные, собирается выяснить, какой механизм вы применяете … предполагая, что это какая-то вещь типа ajax. Если его сервер-серверная вещь, то как sli упоминает, настройка некоторых ограничений на основе удаленного ip поможет, а также создание каких-то токенов проверки подлинности API поможет еще больше (см. Oauth для некоторых указателей)

Вы также можете использовать .htaccess с apache блокировать каждый внешний запрос на страницу, если он вызван внутренне или заблокировать каждый запрос, который не принадлежит вашему домену:

Google search thingie

РЕДАКТИРОВАТЬ
Вы также можете использовать некоторый файл php, который содержит файл, который невозможно прочитать. Так, например, у вас есть file.php:

 <?php $allowedFiles[] = 'somefile.php'; $allowedFiles[] = 'someotherFile.php'; $allowedFiles[] = 'jsonReturnFile.php'; if(in_array($_GET['file'], $allowedFiles)){ include( "include/".$_GET['file'] ); } ?> 

Затем вы можете разрешить file_ get _contents () в этом файле и написать rewriteRule в своем .htacces, чтобы запретить любой запрос в include / folder.

 RewriteRule include* - [F,NC] 

Это вернет 403 запрещенную ошибку для запроса в этот каталог или любой файл в каталоге.

Затем вы можете сделать запрос JSON на что-то вроде: file.php? File = jsonReturnFile.php & someothherParamReadByJsonFile = 1

И когда кто-то пытается получить содержимое файла для файла JSON, он получит запрещенную ошибку, и получение содержимого файла для include.php не вернет ничего полезного.