Restringir el acceso al sitio web

0

Quiero que el sitio web (A) solo funcione si un visitante hizo clic en un enlace de otro sitio web específico (B).

Inicialmente, pensé en usar document.referrer del sitio web A para verificar si el sitio web B es la fuente, pero aparentemente se puede falsificar fácilmente.

¿Cómo podría lograr esto?

Más información:

  • Suponga que el código del sitio web B es casi intocable y, si es posible, todos los cambios deben realizarse en el sitio web A,

  • El sitio web A se ejecuta en nodejs server.

pregunta mido 06.03.2015 - 07:10
fuente

3 respuestas

1

Esto es algo así como JA-SIG CAS (SSO de empresa). Para aplicar esa arquitectura a su instancia, configure lo siguiente en el sitio webB:

  1. Haga que WebsiteB genere un token único en el enlace, como en la cadena de consulta, y asegúrese de que utiliza SSL. Almacene la información del token en una base de datos (o un método similar). Asegúrese de incluir una marca de tiempo para cuando se emitió, de modo que se puedan aplicar restricciones de tiempo.

    <a href="https://websiteA/?MyTokenForWebsiteB=unique_token_value>Specific Link</a>

  2. Configure un servicio web en WebsiteB, al que solo se puede acceder desde WebsiteA a través de SSL, para validar la autenticidad de los tokens emitidos. Incluir lógica para no permitir tokens más antiguos que algunos límites predeterminados (¿5 minutos?).

Cuando los usuarios hagan clic en el enlace en WebsiteB y lleguen a WebsiteA, realice lo siguiente en WebsiteA.

  1. Verifique que exista un token único y que haya un valor.
  2. Valide el token contra el servicio web en el sitio webB
respondido por el user2320464 14.06.2015 - 18:16
fuente
1

Si los sitios web A y B están vinculados internamente, usted podría simplemente transportar la información de la sesión, de modo que la clave de la sesión se puede usar para iniciar sesión automáticamente en el sitio web B; .

Básicamente, necesita un método para que A le diga a B qué códigos de sesión de cliente son válidos, sin depender de que el cliente transmita esta información.

Por supuesto, es posible hacerlo de esta manera utilizando PKI, pero imagino que es un poco demasiado complicado para su situación. En cualquier caso, esta solución se implementaría básicamente de la siguiente manera:
  • El cliente conecta un registro en el sitio web A
  • El sitio web A crea una cookie de sesión y la firma con la clave pública del sitio B
  • El sitio web A redirige al cliente al sitio web B junto con una cookie firmada
  • El cliente va al sitio web B, presenta una cookie de sesión firmada
  • El sitio web B lee la cookie de sesión, lo verifica con la clave privada del sitio web B
  • El cliente ha iniciado sesión en el sitio web B

Tenga en cuenta que todo este proceso podría sufrir varios ataques si alguna de estas conexiones no está protegida mediante SSL / TLS.

    
respondido por el StampyCode 07.03.2015 - 21:22
fuente
0

Si no puede realizar ningún cambio en el sitio web A, no puede lograr lo que necesita ...

Sin embargo, si puede cambiar el sitio web o agregar una nueva página, módulo, método o cualquier cosa del lado del servidor, los algoritmos Digital Signature están diseñados para realizar trabajos similares. Un ejemplo es el siguiente ...

  • En el sitio A, encripta primero una marca de tiempo con la clave privada de A y luego la encripta nuevamente con la clave pública de B.
  • Envíelo a B con una cadena de consulta o encabezado http.
  • Descifre primero con la clave privada de B y luego valídelo con la clave pública de A.
  • Si el valor descifrado es significativo y no es del pasado (para escenarios precisos, debe almacenar las marcas de tiempo recibidas en B), puede creer que la solicitud proviene de A.

Todo lo que necesita hacer es descubrir cómo implementar algoritmos de firma digital en su pila de tecnología (Node.js, J2EE, .NET o lo que sea ...)

    
respondido por el AminSaghi 16.03.2015 - 12:21
fuente

Lea otras preguntas en las etiquetas