2009-07-24 60 views

Respuesta

16

Esto no es posible, sin embargo.

<iframe src="mypage?iframe=yes"></iframe> 

y después comprobar si serverside la cadena de consulta contiene iframe = yes o con la cabecera Referer enviar por el navegador.

+2

gracias, pero esto no resuelve mi problema, ya que quiero que se acceda a la página solo si está dentro de un iframe (por razones de seguridad). agregar algo a la cadena de consulta es demasiado fácil de hacer para estar seguro. – pistacchio

+13

Si es por razones de seguridad, entonces estás haciendo algo mal. En el mejor de los casos, lo único que puede darte pistas para estar en un iframe es un referer. E incluso eso es forjable. La seguridad se realiza mediante verificaciones de acceso y validación, no mediante webs frágiles de suposiciones. – Yuliy

3

No hay forma de comprobar esto que se ajuste a su requisito de "seguridad" como se indica en su comentario en la respuesta de @ WTP.

1

No creo que el lado del servidor pueda hacer esto, entonces ¿por qué no poner un control oculto en su página que estará en el iframe? Cuando se carga la URL en el iframe, puede agregar algún código del lado del cliente para configurar la entrada oculta para indicar que se encuentra en un iframe. La comprobación más fácil sería en el lado del cliente en un método de proceso de carga, así:

// Set hidden input 
someHiddenInput.value = self != top 

Es más seguro que la cadena de consulta, pero todavía podría no ser suficiente seguridad para usted.

Mis 2 centavos.

6

utilizar el siguiente código dentro de la forma:

<asp:HiddenField ID="hfIsInIframe" runat="server" /> 
<script type="text/javascript"> 
    var isInIFrame = (self != top); 
    $('#<%= hfIsInIframe.ClientID %>').val(isInIFrame); 
</script> 

entonces usted puede comprobar fácilmente si se trata de un marco flotante en el código subyacente:

bool bIsInIFrame = (hfIsInIframe.Value == "true"); 

probado y funcionó para mí.

Editar: Tenga en cuenta que necesita jQuery para ejecutar mi código anterior. Para ejecutarlo sin jQuery sólo tiene que utilizar un código como el siguiente código (no probado) para establecer el valor del campo oculto:

document.getElementById('<%= hfIsInIframe.ClientID %>').value = isInIFrame; 

Edición 2: Esto sólo funciona cuando la página se carga una vez. Si alguien tiene una idea para mejorar esto, házmelo saber. En mi caso, afortunadamente solo necesito el valor después de una devolución de datos.

+1

esta debería ser la respuesta. –

+2

no @RoyiNamir, esta no es una solución de servidor;) – tetri

+1

@tetri, con este código puede verificar desde el lado del servidor si se encuentra en un iframe. Estoy de acuerdo en que hay algún código de cliente, pero en mi opinión es la mejor solución porque no le importa cómo se llama la página. La respuesta aceptada actual requiere que el valor de solicitud se establezca en cada iframe, y esto puede olvidarse. – Undercover1989

Cuestiones relacionadas