Foros del Web » Programando para Internet » ASP Clásico »

Una sobre ServerVariables

Estas en el tema de Una sobre ServerVariables en el foro de ASP Clásico en Foros del Web. Buenas noches: Veamos, estuve pensando en una simple rutina para evitar que carguen una página si no proviene de un enlace del web principal. Es ...
  #1 (permalink)  
Antiguo 29/03/2012, 19:23
Avatar de freesoftwarrior  
Fecha de Ingreso: marzo-2006
Mensajes: 362
Antigüedad: 18 años, 1 mes
Puntos: 10
Una sobre ServerVariables

Buenas noches:
Veamos, estuve pensando en una simple rutina para evitar que carguen una página si no proviene de un enlace del web principal. Es decir, que copien la ruta completa y la peguen en otra ventana o en otro browser y la carguen. Quiero evitar eso.

Se me ocurrió lo siguiente

Cita:
If InStr(Request.ServerVariables("HTTP_REFERER"),Requ est.ServerVariables("SERVER_NAME"))=0 Then
Session("msjeError")=3
Pagina="../msje.asp"
Response.Redirect Pagina
End If
Funciona bien si se tratan de links de uno de estos 2 tipos:


Cita:
<a href="test.asp">con enlace</a>

<a onclick="javascript:parent.location.href='test.asp ';" style="cursor:hand;">con onClick</a>

La página test.asp tiene el código ASP antes mostrado. Si uso dichos links carga sin problema alguno y si copio los links en una pestaña adicional o ventana nueva con el mismo browser, pues me muestra el mensaje de que hubo un acceso no autorizado. Genial.

Pero... no funciona si se trata de ventanas adicionales de las creadas con window.open()


Por ejemplo

Cita:
<script>
function ventana()
{ventana=window.open("test.asp", "", "");}
</script>

<a onclick="javascript:ventana();" style="cursor:hand;">ventana adicional</a>

Abre la ventana y me muestra el mensaje de acceso no autorizado. Y la razón es que el HTTP_REFERER no lo reconoce, es más, no captura absolutamente nada de nada.

Y tiene sentido porque es como si, efectivamente, abriera una pestaña o ventana nueva y copiara el link, lo cual hace que el script original funcione.

En resumen: si funciona pero no me permite usarlo en mi web cuando se trata de abrir ventanas adicionales.

¿Que sugieren?

Muchas gracias por el apoyo
Un saludo desde Lima, Perú
  #2 (permalink)  
Antiguo 30/03/2012, 10:24
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 4 meses
Puntos: 98
Respuesta: Una sobre ServerVariables

Referer solo funcionará si existe una acción ejecutada por el cliente, este caso hacer click en un link.

Como alternativa podrías pasar desde esa función JavaScript la URL en la que se encuentra actualmente y quizás combinar esto con una variable de sesión, no se es solo una idea inicial:


Código ASP:
Ver original
  1. function PageUrl
  2.      dim sPort
  3.      sPort = Request.ServerVariables("SERVER_PORT")
  4.      if sPort = "80" then
  5.         sPort = ""
  6.      else
  7.         sPort = ":" & sPort
  8.      end if
  9.  
  10.      PageUrl = "http://" & Request.ServerVariables("SERVER_NAME") & sPort & _
  11.                            Request.ServerVariables("URL") & "?" & _
  12.                            Request.ServerVariables("QUERY_STRING")
  13.   end function
Tomada de: http://stackoverflow.com/questions/2...in-classic-asp

Código Javascript:
Ver original
  1. <script>
  2. function ventana()
  3. {ventana=window.open("test.asp?referer=<%=PageUrl%>", "", "");}
  4. </script>


Saludos
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #3 (permalink)  
Antiguo 30/03/2012, 17:36
Avatar de freesoftwarrior  
Fecha de Ingreso: marzo-2006
Mensajes: 362
Antigüedad: 18 años, 1 mes
Puntos: 10
Respuesta: Una sobre ServerVariables

Muchas gracias por la respuesta. Voy a curiosear un poco la idea.
  #4 (permalink)  
Antiguo 31/03/2012, 11:19
 
Fecha de Ingreso: enero-2010
Mensajes: 73
Antigüedad: 14 años, 3 meses
Puntos: 9
Respuesta: Una sobre ServerVariables

Yo, cuando quiero evitar que hagan lo que dices, lo que hago es enviar un campo hidden mediante un formulario a esa página, si ese campo hidden no contiene datos simplemente pongo:
Response.Write "<script language='javascript'>location.href='/index.asp'</script>" y los saco fuera de la página mediante javascript. Si contiene datos correctos, ejecuto la página normalmente
  #5 (permalink)  
Antiguo 03/04/2012, 07:00
Avatar de freesoftwarrior  
Fecha de Ingreso: marzo-2006
Mensajes: 362
Antigüedad: 18 años, 1 mes
Puntos: 10
Respuesta: Una sobre ServerVariables

La idea del port es interesante pero mientras sea con el mismo browser y con la sesión abierta no funciona.

Lo del campo hidden funciona si y solo si se envía un formulario pero en el caso de cargar simplemente una página no. Pero la idea es buena.
  #6 (permalink)  
Antiguo 03/04/2012, 15:20
 
Fecha de Ingreso: enero-2010
Mensajes: 73
Antigüedad: 14 años, 3 meses
Puntos: 9
Respuesta: Una sobre ServerVariables

Cita:
Iniciado por freesoftwarrior Ver Mensaje
Buenas noches:
Veamos, estuve pensando en una simple rutina para evitar que carguen una página si no proviene de un enlace del web principal
No lo entiendo, si quieres que venga de ese enlace y solo de ese enlace, en lugar de un enlace, pones un formulario con el campo hidden.

¿Cómo vas a cargar simplemente una página, si tiene que venir del enlace del web principal?
  #7 (permalink)  
Antiguo 03/04/2012, 16:39
Avatar de freesoftwarrior  
Fecha de Ingreso: marzo-2006
Mensajes: 362
Antigüedad: 18 años, 1 mes
Puntos: 10
Respuesta: Una sobre ServerVariables

Gracias por responder Hexplore. Lamento no haberme explicado bien. La situación es que en este proyecto hay mucho uso de ventanas adicionales creadas con window.open() y claro, por motivos de seguridad en los browsers, siempre se mostrará la barra de dirección en la parte superior donde se podrá ver la dirección completa de la ventana creada (obvio).

Ahora bien, lo que deseo es que cuando se copie ese link y se pegue en otra pestaña del mismo browser, simplemente lo detecte y le muestre un mensaje indicando que no puede proseguir la acción, que no esta autorizado, etc.

¿Y por que en el mismo browser?. Por el tema de la sesión abierta. Como uno tiene que logearse se crean variables de sesión (Session en ASP) y es por ese motivo que si yo copio la URL (¿o es "el" URL?) en otra pestaña o inclusive en otra ventana (abriendo otra sesión del browser) si lo carga sin problema alguno.

Eso es lo que deseo hacer.

Espero haberme explicado mejor ahora.

Un saludo desde el Perú
  #8 (permalink)  
Antiguo 03/04/2012, 17:27
 
Fecha de Ingreso: enero-2010
Mensajes: 73
Antigüedad: 14 años, 3 meses
Puntos: 9
Respuesta: Una sobre ServerVariables

Y en esa ventana adicional, creada con window.open() puedes recoger variables de un formulario?
Si no se puede, entonces entiendo que lo que te digo de los formularios no te sirva, pero si se puede, es que sigo sin entender el problema

Yo tengo el foro hecho con formularios/post, entro en el foro y me meto en un tema en concreto(estoy haciendole llegar el id del tema mediante post, asi como la pagina, el foro, el subforo, etc...), copio la dirección, la pego en una nueva pestaña del mismo browser, y me da error, pero si quieres mostrar un mensaje de error en concreto basta con controlar que esa variable esté vacía.
  #9 (permalink)  
Antiguo 03/04/2012, 17:52
Avatar de freesoftwarrior  
Fecha de Ingreso: marzo-2006
Mensajes: 362
Antigüedad: 18 años, 1 mes
Puntos: 10
Respuesta: Una sobre ServerVariables

Lo que pasa es que muchas de las ventanas se crean para cargar otras páginas, no en respuesta de una petición o proceso, simplemente cargan una página y listo. Por ejemplo, si quiere uno tener el directorio de clientes, hace clic en un icono y este llama a la función de este tipo

Cita:
function verplancontable(n,cuenta,admin) //Permite cargar el menú de navegación del Plan Contable
{
LeftPosition=(screen.width)?(screen.width-700)/2:100;
TopPosition=(screen.height)?(screen.height-400)/2:100;

if(n==1)
{ventana=window.open("plancontable.asp?ruta=ok", "verplancontable", "left="+LeftPosition+",top="+TopPosition+",width=7 00,height=400,scrollbars=1,directories=0,toolbar=0 ,location=0,status=0,resizable=0,menubar=0");}
else if(n==3)
{ventana=window.open("plancontable.asp?clase=cuent a&ruta=ok&numcuenta="+cuenta+"&admin="+admin, "verplancontable", "left="+LeftPosition+",top="+TopPosition+",width=7 00,height=400,scrollbars=1,directories=0,toolbar=0 ,location=0,status=0,resizable=0,menubar=0");}
else
{ventana=window.open("../plancontable.asp?ruta=ok", "verplancontable", "left="+LeftPosition+",top="+TopPosition+",width=7 00,height=400,scrollbars=1,directories=0,toolbar=0 ,location=0,status=0,resizable=0,menubar=0");}

ventana.focus();
}
Muchas, si no todas (haciendo memoria no estoy seguro) funcionan de esa forma. Por eso es que de momento no veo como poder incluir un campo de formulario y menos un formulario para poder hacer lo que sugieres.

Por ello consideré lo de las variables de servidor.

Además tú hablas de un campo hidden y me pregunto ¿que evitaría ver el código fuente de la página, ubicar el campo hidden (supongamos que es el único) y luego copiar la dirección URL e incluir un &campo_hidden=valor?

Porque si el valor del campo hidden lo asigna un proceso de servidor tipo ASP o PHP, el valor se va a ver en el código fuente. Y si el valor es asignado en tiempo real por alguna función en javascript, pues bastaría con ubicar dicha funciión aunque tome tiempo, pues los JS se pueden descargar y sólo si estuvieran encriptados no sería nada fácil el entenderlos.

También había considerado el utilizar máscaras en el dominio, para que siempre muestre el dominio y nada más, pero no se si vaya a ser útil.

Muchas gracias por tu preocupación e interés.

Un saludo desde el Perú

Etiquetas: asp, server
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 08:11.