Limita l'accesso al sito web

0

Voglio che il sito web (A) funzioni solo se un visitatore è arrivato facendo clic su un link da un sito Web specifico (B).

Inizialmente pensavo di usare document.referrer dal sito web A per verificare se il sito web B è la fonte, ma a quanto pare può essere falsificato facilmente.

Come potrei ottenere questo?

Altre informazioni:

  • Supponiamo che il codice B del sito Web sia praticamente intoccabile e, se possibile, tutte le modifiche devono essere apportate nel sito Web A,

  • Il sito web A gira su nodejs server.

posta mido 06.03.2015 - 07:10
fonte

3 risposte

1

Questo è il modo in cui funziona JA-SIG CAS (SSO aziendale). Per applicare tale architettura alla tua istanza, configura quanto segue su WebsiteB:

  1. Il sito WebB genera un token univoco nel collegamento come nella stringa di query e si assicura che utilizzi SSL. Memorizzare le informazioni sui token in un database (o metodo simile). Assicurati di includere un timestamp per quando è stato pubblicato in modo che le restrizioni temporali possano essere applicate.

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

  2. Imposta un servizio Web sul sito webB, accessibile solo dal sito WebA tramite SSL, per convalidare l'autenticità dei token rilasciati. Includere la logica per non consentire token più vecchi di un limite predeterminato (5 minuti?).

Quando gli utenti fanno clic sul collegamento in WebsiteB e arrivano al sito WebA, esegui le seguenti operazioni su WebsiteA.

  1. Verifica che esista un token univoco e che esista un valore.
  2. Convalidare il token contro il servizio web sul sito web
risposta data 14.06.2015 - 18:16
fonte
1

Se i siti A e B sono collegati internamente, puoi semplicemente trasportare le informazioni sulla sessione, in modo che la chiave di sessione possa essere utilizzata per accedere automaticamente al sito Web B - facendo questo senza i siti A e B che comunicano internamente in qualche modo sarebbe molto difficile da proteggere .

Fondamentalmente è necessario un metodo di A che dice a B quali codici di sessione client sono validi, senza fare affidamento sul client che trasmette queste informazioni.

Ovviamente è possibile farlo in questo modo usando PKI, ma immagino sia un po 'complicato per te. In ogni caso, questa soluzione sarebbe fondamentalmente implementata come segue:
  • Il client collega i log al sito web A
  • Il sito Web A crea un cookie di sessione e lo firma con la chiave pubblica del sito Web
  • Sito Web Reindirizza il cliente al sito Web B insieme al cookie firmato
  • Il cliente accede al sito Web B, presenta un cookie di sessione firmato
  • Il sito B legge cookie di sessione, lo verifica con la chiave privata del sito Web
  • Il client è ora connesso al sito web B

Tieni presente che l'intero processo potrebbe comunque risentire di numerosi attacchi se nessuna di queste connessioni non è protetta tramite SSL / TLS.

    
risposta data 07.03.2015 - 21:22
fonte
0

Se non puoi apportare alcuna modifica al sito web A, non puoi ottenere ciò di cui hai bisogno ...

Tuttavia, se puoi cambiare sito Web o aggiungere una nuova pagina, modulo, metodo o qualsiasi cosa sul lato server, gli algoritmi Digital Signature sono progettati per eseguire lavori simili. Un esempio è il seguente ...

  • Nel sito A, crittografare un timestamp prima con la chiave privata di A e quindi crittografarlo di nuovo con la chiave pubblica di B.
  • Invia a B con stringa di query o intestazione http.
  • Decifralo prima con la chiave privata di B e poi convalidalo con la chiave pubblica di A.
  • Se il valore decrittografato è significativo e non proviene dal passato (per scenari precisi, è necessario memorizzare i timestamp ricevuti in B), puoi credere che la richiesta provenga da A.

Tutto quello che devi fare è scoprire come implementare gli algoritmi di firma digitale nel tuo stack tecnologico (Node.js, J2EE, .NET o che altro ...)

    
risposta data 16.03.2015 - 12:21
fonte

Leggi altre domande sui tag