opciones - php http_get
cómo prevenir el archivo PHP_get_contents() (4)
Puede usar $ _SERVER [''REMOTE_ADDR''] para obtener la dirección de la dirección del cliente. También puede marcar $ _SERVER [''HTTP_REFERER''] y bloquear las solicitudes externas de esa manera, pero es menos confiable. Probablemente hay algunas otras técnicas que involucran $ _SERVER que puedes probar.
una de mis páginas php devuelve datos como este:
<?php
//...
echo "json string";
?>
pero alguien más usa file_get_contents () para obtener mis datos y usarlos en otro sitio web.
¿Alguien puede decirme qué puedo hacer para evitar que esto suceda?
Considero si puedo hacer que el nombre de dominio de la solicitud haga eco de otra cosa. Pero no lo sé
la función para obtener el nombre de dominio de la solicitud. Y si la solicitud es enviada por un servidor, esa
será inútil Mi inglés es pobre, para expresar dudas, por favor tengan paciencia.
También puede usar .htaccess con apache para bloquear cada solicitud externa a la página si recibe una llamada interna o bloquear cada solicitud que no proviene de su dominio:
EDITAR
También podría usar algún archivo php que incluya el archivo que no se puede leer. Entonces, por ejemplo, tienes file.php:
<?php
$allowedFiles[] = ''somefile.php'';
$allowedFiles[] = ''someotherFile.php'';
$allowedFiles[] = ''jsonReturnFile.php'';
if(in_array($_GET[''file''], $allowedFiles)){
include( "include/".$_GET[''file''] );
}
?>
Luego puede permitir file_ get _contents () en ese archivo y escribir una rewriteRule en su .htacces para rechazar cualquier solicitud a la carpeta include /.
RewriteRule include* - [F,NC]
Eso devolverá un error prohibido 403 para una solicitud a ese directorio o cualquier archivo en el directorio.
Luego puede hacer una solicitud JSON a algo como: file.php? File = jsonReturnFile.php y alguna otraParamReadByJsonFile = 1
Y cuando alguien intente obtener el contenido del archivo JSON obtendrá el error prohibido, y obtener el contenido del archivo para include.php no devolverá nada útil.
Tu lucha es una batalla cuesta arriba aquí. Estoy asumiendo que su proceso en el servidor que responde en json se está consumiendo a través de javascript en los navegadores de sus usuarios ... por lo que no hay una manera fácil de encriptarlo. Puede probar algunas de las técnicas utilizadas para evitar xspf (consulte http://en.wikipedia.org/wiki/Cast-site_request_forgery ). Si desarrollaste el cliente para pasar algún token de sesión que sea uniq por cliente, podrías reducir parte del problema. Pero, lo más probable es que quienquiera que esté robando tus datos va a descubrir el mecanismo que pongas en su lugar ... suponiendo que se trata de una especie de tipo ajax. Si se trata de un servidor-servidor, como sli menciona, la configuración de algunas restricciones basadas en la dirección IP remota ayudaría, además de la configuración de algún tipo de tokens de autenticación API ayudaría aún más (ver oauth para algunos punteros)
también puedes usar sesiones. si en alguna parte de su aplicación, antes de que el usuario obtenga los datos json, inicia una sesión, luego en esta página donde está generando datos json, puede verificar la variable de sesión. De esta forma, solo los usuarios que pasaron la página del generador de sesiones pueden ver su resultado. supongamos que tiene la página A.php que genera la sesión. use este código antes de enviar cualquier cosa en esta página.
session_start();
$_SESSION[''approvedForJson''] = true;
luego, en su página donde está enviando datos json, antes de enviar cualquier cosa, vuelva a llamar a session_start (). el comienzo de su código PHP es un buen lugar para llamarlo. luego, antes de enviar los datos json, compruebe si existe o no la variable de sesión para usuarios aprobados.
if ( isset($_SESSION[''approvedForJson'']) && $_SESSION[''approvedForJson''] ) {
echo "json data";
} else {
// bad request
}