как предотвратить PHP file_get_contents () - PullRequest
2 голосов
/ 25 декабря 2008

одна из моих страниц php возвращает такие данные:

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

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

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

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

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

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

Ответы [ 4 ]

2 голосов
/ 25 декабря 2008

Вы также можете использовать сеансы. если где-то в вашем приложении, прежде чем пользователь получит данные 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
}
1 голос
/ 25 декабря 2008

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

1 голос
/ 25 декабря 2008

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

Google search thingie

EDIT
Вы также можете использовать некоторый 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 /.

RewriteRule include* - [F,NC]

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

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

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

1 голос
/ 25 декабря 2008

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

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