Foros del Web » Programando para Internet » PHP »

Se puede evitar un fopen() ?

Estas en el tema de Se puede evitar un fopen() ? en el foro de PHP en Foros del Web. Es posible evitar un fopen() ? Pero yo quisiera: fopen no excepto if(eregi('miamigo.com',$_SERVER['REQUEST_URI'])); Eso es posible ?. Ese tipo de acceso a mi web no ...
  #1 (permalink)  
Antiguo 09/07/2004, 11:25
 
Fecha de Ingreso: febrero-2004
Mensajes: 1.987
Antigüedad: 20 años, 9 meses
Puntos: 22
Se puede evitar un fopen() ?

Es posible evitar un fopen() ?

Pero yo quisiera:

fopen no excepto if(eregi('miamigo.com',$_SERVER['REQUEST_URI']));

Eso es posible ?.

Ese tipo de acceso a mi web no es http, ni FTP, que tipo de acceso es es ?.

NOTA: fopen con PHP, existe con otros lenguajes ?.

Gracias.
  #2 (permalink)  
Antiguo 10/07/2004, 14:36
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Vamos a ver..

fopen() es una función para abrir archivos desde el sistema de archivos del servidor.

En PHP la función fopen() según versión y configuración de PHP (sobre "wrappers") puedes "abrir" una página externa vía llamada: http:// .. pero lo que veras en ese modo de apertura será el HTML/lenguaje del lado del cliente=salida que este entregue como salida y en ningún momento el "código fuente PHP" que lo verías si haces un fopen() hacia una ruta ABSOLUTA (/nose/blabla/) de tu servidor.

Ejemplo .. en servidores con -mala- configuración sobre restricciones de que archivos puede abrir que usuario (open_base_dir por ejemplo) .. podrías en un servidor compartido (ejemplo un servicio de hosting), desde tu sitio.com (fisicamente en: /www/sitio.com/script_malicioso.php ... por ejemplo) abrir un archivo (con fopen()) de otrositio.com (que en ese servidor compartido sería /www/otrositio.com/archivo.tal).

Todos los lenguajes de programación tienen sus funciones para abrir archivos .. ya sea en rutas absolutas (lo típico) o rutas "remotas" con una función tipo PHP que "depende" de lo que indiques como ruta así lo abrirá o tal vez necesites para ese caso otra función que lo haga (pero seguro que existe).



Un saludo,
  #3 (permalink)  
Antiguo 10/07/2004, 14:44
 
Fecha de Ingreso: noviembre-2003
Mensajes: 114
Antigüedad: 21 años
Puntos: 0
Puedes usar la funcion:

show_source("RUTAYEXTEMSION.TAL");


sirve para mostrar el código, aunque me imagino que para remoto no vaya.


Un saludo,
DJ-Dom
__________________
Soporte y Creaciones PHP-Nuke:
NukeProjects.Net

if($Necesitas=="Ayuda"){
echo "No dudes en pedirla";
}
  #4 (permalink)  
Antiguo 10/07/2004, 16:20
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
La función show_source() es una mezcla entre un fopen() común y aplicar funciones para "colorear" el código que se lee y darle formato (identación y demás colores).

Si se usa para un archivo "local" .. y este es un .php por ejemplo como lenguaje del lado del servidor (podría ser un .pl .. .cgi .. etc). veras ese código -SIN- ejecutarse (es decir, el código fuente) .. si lo haces de forma remóta: http:// .. veras el código "fuente" que se -genere- de su ejecución: HTML, javascript .. o lo que entregue como salida ese código al ejecutarse "del lado del servidor"..

Un saludo,
  #5 (permalink)  
Antiguo 10/07/2004, 16:26
 
Fecha de Ingreso: noviembre-2003
Mensajes: 114
Antigüedad: 21 años
Puntos: 0
ah, ok, pero el amigo lo que quiere es que se muestre su codigo de forma remota a determinadas web.

Bueno ya sería cosa de otros metodos.
__________________
Soporte y Creaciones PHP-Nuke:
NukeProjects.Net

if($Necesitas=="Ayuda"){
echo "No dudes en pedirla";
}
  #6 (permalink)  
Antiguo 10/07/2004, 16:50
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Pues ... tendría que aclarar que es lo que quiere hacer o no hacer ..

A mi ese código me dice que estás validando el acceso del scritp .. pero como es "php" código .. si no se ejecuta no va a actuar esa "validación".

Es decir . .el fopen() en "local" con acceso con ruta absoluta lo va abrir y no lo va a ejecutar .. si se llama de forma remota lo "ejecutará" y ahí actuará esa validación.

Hay otras formas de restringir el acceso a archivos por parte del servidor HTTP que uses con (Apache en sus .htacces y un "deny from tal IP" o similar) así no depende del "tipo" de archivo ya que es el servidor HTTP el que decide que se puede acceder y que no y no es un lenguaje del lado del servidor como pueda ser PHP el que primeramente requiere ser ejecutado para luego hacer lo que tenga que hacer.

Un saludo,
  #7 (permalink)  
Antiguo 14/07/2004, 07:26
 
Fecha de Ingreso: febrero-2004
Mensajes: 1.987
Antigüedad: 20 años, 9 meses
Puntos: 22
Precisamente Cluster, lo que pretendo es que no me hagan FOPEN(), es decir, que no me cojan el HTML con esa funcion.

Que si pueda atravez de http://, pero no con FOPEN().

Existe diferencai entre un protocolo y otro ?.

Pense algo como...

if(!eregi('mozilla',$_browser)){echo 'No te me lleves mis datos...'; exit;}

Sera correcto ?.
  #8 (permalink)  
Antiguo 14/07/2004, 07:45
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Realmente no sé que hace tu pagina o tu scirpt y no lo quieres limitar. Pero fijate que ya te comenté que si tienes un script.php que genera cierta salida .. -antes- de generalo se debe haber ejecutado la parte PHP que pueda validar su acceso. Ya sea por una validación del "HOST" que la pide o por cookies/sesiones que crees para saber que la llamada a esa página está se origina dentro de una sesión creada en tu sitio.

A su vez el servidor HTTP (Apache?)... sea con un .htaacces o similar puede restringir que "IP" puede acceder a cierta página. (tal cual se hace con los "hot links" para evitar que te "roben" imagenes u otro tipo de archivos .. que no sea accedido desde fuera de tu servidor .. es decir . .sin acceso http sino por ruta absoluta a tu servidor).

Un saludo,
  #9 (permalink)  
Antiguo 14/07/2004, 08:44
 
Fecha de Ingreso: febrero-2004
Mensajes: 1.987
Antigüedad: 20 años, 9 meses
Puntos: 22
Haber profe....

Le hice un fopen a una web de cine...

(LES ROBE la programacion del mes).
Ahora, en mi "pagina_que_roba_y_que_quita_publicidad_y_que_depu ra_info.php" hay un monton de cosas para poder "depurar" esa programacion...

Quitar TAGS, etc...

Y esa info logre meterla en una BD, y hacer otras cosas...

Y precisamente, no quiero que luego de ARREGLAR TANTISISISMO esa "pagina_ladrona.php", otro personaje me haga lo mismo...


Ademas, supongamos que mañana me llama City-Bank.com, y me dice, hacenos una web, pero qu no nos puedan robar los datos asi como vos se los robas a la web de cine...

Ya me podes comprender un poco + ?.

Gracias.
  #10 (permalink)  
Antiguo 14/07/2004, 08:54
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Pues .. lo que pretendes no se puede hacer.

Por qué cuando publicas una página X lo haces para que acceda todo cliente. Y como cliente se entiende desde un navegador común o hasta tu programación PHP que pueda hacer de cliente vía el protocolo HTTP.

Si me dices que tal página sólo la puede ver X clientes (por IP -> dominio) OK, se pueden aplicar restricciones ..pero en tu caso el acceso ha de estar abierto a todo el mundo (IP "host").

Un saludo,
  #11 (permalink)  
Antiguo 14/07/2004, 10:20
 
Fecha de Ingreso: febrero-2004
Mensajes: 1.987
Antigüedad: 20 años, 9 meses
Puntos: 22
Asi que pagina.php no puede diferencair si le estan abriendo via HTTP, o via fopen()...

Gracias.

Tonces tengo que "resiganrme" a que algun listo me "hurte" tambien la programacion...

O la otra opcion seria como que con un header, ¿no?.

Tonces seria:

CREAR VALOR_SESSION...
HEADER(programcion.php)

Y programacion.php :

if(empty($valor_session){'chao';}

Por que fopen() no recibe cookies, o si?.

Gracias por su time.
  #12 (permalink)  
Antiguo 14/07/2004, 10:40
 
Fecha de Ingreso: mayo-2004
Mensajes: 12
Antigüedad: 20 años, 6 meses
Puntos: 0
Yo en mi web hago uso del fopen, pero sin robar nada sólo obtengo titulares que en la mayoría de los casos se pueden obtener por RSS también, que viene a ser lo mismo. Con alguna web tenía problemas, ya que existe algún mecanismo de protección que puede identificar si el cliente que se conecta es un navegador o es un simple "robot". Para esos casos tuve que utilizar una función que sustituye el fopen por un emulador de navegador. Con la emulación ya no hay resistencia posible

Última edición por rebelyell; 14/07/2004 a las 10:42
  #13 (permalink)  
Antiguo 14/07/2004, 11:43
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Creo que tienese un gran lio con lo que hace "fopen()" y lo que realmente significa un acceso por HTTP.

fopen() ya te comenté que hace dos cosas bien diferentes dependiendo como se use ..

Si tu fopen() usa llamada tipo http:// .. el acceso cara a tu servidor HTTP es por ese médio donde el "cliente" en ese caso será PHP y no un navegador corriente. Lo mismo harías con funciones como include() pero con llamada http:// o haciendo una conexión vía sockets donde incluso "simularias" las cabeceras HTTP adecuadas para hacer pasar a tu script.php por cierto "navegador" conocido.

La solución que planteas vía programación y usando sesiones es correcta en su base: acceder por página X de tu sitio que creará una sesión (variable) y ..para ver lo que entregue tu nose.php verificas la existencia de esa variable de sesión .. Si no existe es que se está haciendo una llamada -directa- sin haber pasado por tu página de tu sitio que permite su acceso.

ejemplo básico:

x.php
Código PHP:
<?
session_start
();
$_SESSION['pasa']="da igual, se va a usar como flag";
header() .. o link hacia "nose.php"
?>
nose.php
Código PHP:
<?
session_start
();
if (empty(
$_SESSION['pasa'])){
die (
"Aquí no se puede acceder directo .. ");
}

// resto de tu página .. sea con + o - PHP por médio ...

?>
Este sistema tampoco es infalible 100% .. Implentando parte del protocolo HTTP para ir "simulando" la secuencia de: conectar a tu x.php y de ahí saltar a nose.php (con la gestión de cookies/url necesaria) también accederían a tu nose.php. Date cuenta que no estás "validando" nada más .. no hay un "usuario/contraseña" que pidas y que autentifiques. Pero por lo menos .. lo pones bastante más dificil.


Un saludo,
  #14 (permalink)  
Antiguo 14/07/2004, 13:39
 
Fecha de Ingreso: febrero-2004
Mensajes: 1.987
Antigüedad: 20 años, 9 meses
Puntos: 22
Y siempre que hacemos FOPEN() el server "piensa" que "somos" un robot ?.
  #15 (permalink)  
Antiguo 14/07/2004, 13:51
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Y dale con fopen()

NO hables más de "fopen()" sino de que tipo de llamada haces o mandas a llamar por tu función X concreta. Por que eso mismo se puede hacer con un "include()" y tendría el mismo efecto básico. o un file() .. Pero todo depende de qué le pidas .. así te entregará lo que interprete tu servidor HTTP (con tu interprete PHP o lo que corresponda) o bien obtendras el código fuente de PHP o se ejecutará este.

Si haces la llamada con http:// (o cualquier otro wrapper) es tu servidor HTTP (en el caso de http://) el que indentifica que quien le está pidiendo la página es un "cliente" que se identifica quien es y otras propiedades por el protocolo HTTP. Los "navegadores" se identifican a de cierta manera .. los robots a la suya y hasta tu con PHP como ya te he mencionado podrías hacer un "cliente HTTP" y decir que eres "fulano de tal" cuando te "identificas" como "cliente".

Un saludo,
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:56.