Pregunta

Estoy creando una pequeña página web mediante PHP a la que se accederá como un IFRAME desde un par de sitios. Quiero restringir el acceso a este sitio para que funcione SOLAMENTE dentro del " aprobado " Sitios, y no otros sitios o accedidos directamente. ¿Alguien tiene alguna sugerencia? ¿Es esto posible? El sitio PHP será Apache, y los sitios que incluyan el contenido probablemente serán .NET.

Solo para aclarar, cualquier sitio puede ver la página, siempre y cuando sea un marco dentro de un sitio aprobado. Quiero bloquear a las personas para que no accedan directamente. Creo que las cookies pueden ser una solución, pero no estoy seguro.

¿Fue útil?

Solución 7

Gracias por todas las grandes ideas! Creo que la solución a la que voy a ir es una cookie de sesión establecida por el " iframing " aprobado; sitio. Alguien realmente determinado todavía podrá obtener el contenido, pero creo que puedo evitar la mayoría de los abusos si aparece un "secreto" decente algoritmo basado en algún tipo de secreto compartido en ambos lados, y que el sitio aprobado establezca una cookie de sesión que leerá mi sitio PHP. Si la cookie es válida y cumple mis criterios, mostraré el contenido, de lo contrario no lo haré. La información que estoy protegiendo no es crítica para la misión, solo intento evitar que se abuse de ella.

Otros consejos

Lamentablemente esto no va a ser posible.

Usando Javascript, puedes verificar si tu página está incrustada en otro marco, pero esto no será infalible, ya que Javascript se puede desactivar en los navegadores de algunas personas.

Por ejemplo, puedes ejecutar el siguiente javascript para reparar tu página si esa es la intención:

if (top.location != location) {
  top.location.href = document.location.href ;
}

Pensando en esto ... no estoy convencido de que esto sea completamente seguro, pero aquí hay una oportunidad mientras lo pienso más -

La única forma de hacerlo es si controla los sitios en los que se incrustaría. Si los controla, puede pasar el tiempo, encriptado, del conjunto de marcos al marco:

 <iframe src="http://yourdomain/frame.php?key=p21n9u234p8yfb8yfy234m3lunflb8hv" />

frame.php luego desencripta el mensaje para encontrar el tiempo dentro de un pequeño delta (digamos 10 segundos). Como frame.php sabe que solo los sitios aceptables podrían haber cifrado el tiempo, sabe que está bien mostrarse. De lo contrario, no produce nada.

Cualquier otra cosa, ya sea javascript o HTTP_REFER, puede ser falsificada, desactivada o burlada.

Y, de hecho, con esa URL, un atacante podrá mostrar su marco en cualquier lugar, siempre que el usuario lo cargue dentro de 10 segundos. Así que el atacante simplemente rasparía el sitio aceptado y tomaría la llave. Si ese modelo de amenaza es inaceptable para usted, entonces realmente no hay nada que pueda hacer (excepto tal vez un protocolo aún más complicado).

Lo implementaría de la misma manera que Google implementa adsense. En lugar de tener que incrustar el código iframe en su sitio, en lugar de ello, incruste algún javascript que incluya un número de cuenta:

<script type="text/javascript"><!--
myiframe_client = "12345";
myiframe_width = 728;
myiframe_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://www.example.com/scripts/show_iframe.js">
</script>

Al menos de esta manera, puede administrar quién muestra sus contenidos de iframe por cuenta. Si alguien no autorizado intenta usar su iframe, puede desactivar la cuenta. También puede examinar las propiedades del documento a través de javascript (dentro de las limitaciones de seguridad del navegador) para evitar el acceso no autorizado.

El raspado de pantalla podría ser una posible solución aquí.

Configure la lista de acceso en su sitio para aceptar solo las solicitudes provenientes de los servidores web de los sitios aprobados y emitirles un token de seguridad. Esa es la parte fácil.

El equipo de desarrollo en su extremo deberá configurar un servlet de retransmisión para obtener su contenido y luego mostrarlo a los usuarios (después de volver a escribir las direcciones URL pertinentes).

Esto puede ser bastante complicado, pero podría controlar mejor quién accede al sitio. Además, cualquier token de seguridad que emita no será visible para el usuario web, ya que solo debe transmitirse entre los dos servidores web.

Puede MD5 (o cifrar para una mejor seguridad) la IP del cliente usando una fecha secreta de salt + y pasar esto como un parámetro en la url iframe src. En el iframe, haces lo mismo y verificas si el resultado es el mismo que el parámetro; Si no, denegar el acceso

¿No podría verificar el $ _SERVER ['HTTP_REFERER'] para asegurarse de que incluya una cadena determinada?

if (strpos('http://example.com', 

¿No podría verificar el $ _SERVER ['HTTP_REFERER'] para asegurarse de que incluya una cadena determinada?

<*>

En su caso, es posible que desee analizar primero la dirección, luego verifique si in_array () .

Esto no será infalible, ya que las personas pueden falsificar la referencia, PERO tal vez podrías hacer algún tipo de uso de teclas con alguna otra comunicación entre los 2 servidores. Si se ha utilizado la clave, entonces no hay que ir.

SERVER['HTTP_REFERER']) !== false) { // allowed }

En su caso, es posible que desee analizar primero la dirección, luego verifique si in_array () .

Esto no será infalible, ya que las personas pueden falsificar la referencia, PERO tal vez podrías hacer algún tipo de uso de teclas con alguna otra comunicación entre los 2 servidores. Si se ha utilizado la clave, entonces no hay que ir.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top