Domanda

Se ho un portale che utilizzo per accedere ad altri siti Web.

Dì che ho un portale A . E voglio accedere al sito Web B.

Se B ha bisogno di alcune informazioni critiche per funzionare come username . Voglio passare queste informazioni in modo sicuro.


Quindi faccio forma in questo modo:

 <%--------------------------------------------------------------------------------------%>
    <form id="frm_sal" action="B URL the first page" method="post">
    <input id="hdn_sal_Emp_Num" type="hidden" runat="server" name="hdn_sal_Emp_Num" />
    <input id="hdn_sal_user_name" type="hidden" runat="server" name="hdn_sal_user_name" />
    <input id="hdn_sal_result" type="hidden" runat="server" name="hdn_sal_result" />
    </form>
  <%--------------------------------------------------------------------------------------%>

e nel clic del client di evento di un link nel portale A , mi sottometterò a questo modulo.

Un modulo per ogni sito web.

La mia domanda è su come proteggere tali dati e prevenire la manomissione.

È stato utile?

Soluzione

Crittografare le informazioni in a <form> Prima di inviarlo al client, quindi decrittarlo dall'altra parte utilizzando una chiave privata.

Ecco un buon esempio di crittografia. Crittografare e decrittografare una stringa

Ecco qualcosa che mi piace fare. Crea una classe chiamata "SharedSession" e aggiungi le proprietà che si desidera condividere, le proprietà possono persino essere altre classi. Aggiungi anche una proprietà Timestamp. Serializzare la classe in una stringa JSON (Json.net), crittografalo e spingilo in un campo di forma.

Quando il modulo viene pubblicato dall'altra parte, lo deserializza come classe "condivisa".

Usa il campo Timestamp per due motivi:

1) Per far sembrare che i dati crittografati cambino sempre. Ad esempio, se stai inviando le stesse credenziali per l'utente corrente ancora e ancora, la stringa crittografata non cambierebbe mai, quindi il timestamp costringe la stringa crittografata ad apparire diversa ogni volta.

2) Per assicurarsi che i dati pubblicati non siano stantii o vecchi. Imposta una soglia di circa 1 minuto circa. Se i dati hanno più di 1 minuto, buttali fuori.

EDIT

Un'altra cosa ... non chiamare il tuo campo nascosto "SharedSessionData" o qualcosa a cui un hacker sarebbe interessato. Chiamalo qualcosa come "promozionale-data" per buttarli via.

Spero che sia di aiuto.

Altri suggerimenti

Ci sono un paio di modi in cui questo può funzionare.

Il primo sarebbe quello di crittografare la corda di query in qualche Fasion, McRypt si menti in mente che è decentemente supportata dalla piattaforma crociata, questo si basa sulla persona che non rompe il sale/passphrase, questo può essere mitigato cambiando frequentemente il sale. L'altro problema che hai è un attacco di risposta, questo è quando qualcuno copia incolla l'URL da un utente in un altro browser, essenzialmente copiando la richiesta. Questo può essere mitigato utilizzando un DateTime nell'URL insieme a un token di tempo che non può essere riutilizzato.

L'altro modo sarebbe che i due server comunicano, quando si invia un utente da un sito a un altro invieti i dati (con un singolare token/GUID) tramite un protcol di comunicazione del server di qualche modo (sapone, riposo, qualcosa inventato) E poi dare all'utente il token per passare.

A meno che il sito Web non sia interno, dovresti sempre evitare di bloccarsi tramite indirizzo IP, molti utenti hanno più indirizzi IP e utilizzare varie regole per diffondere i dati lungo gli IP in modo che possano cambiare a metà richiesta e persino alcuni grandi ISP (AOL essendo uno) Forzare gli utenti attraverso proxy che hanno più endpoint e indirizzi diversi.

L'ultima opzione sarebbe quella di avere un dataStore di dati condiviso, IE database a cui entrambi i server Web possono "parlare" per interrogare le informazioni dell'utente. Questo è reso più semplice se si trovano sullo stesso dominio in modo da poter impostare un cookie di sessione che funziona su entrambi i siti, in caso contrario, è necessario tornare al token unico che viene passato.

In Passa i dati da pagina a pagina in sicurezza Un utente descrive la creazione di una classe personalizzata per contenere i dati sensibili e posizionarli nella cache. Credo che potresti anche usare una sessione per realizzare ciò che stai parlando, che è discusso qui: Come passare un campo nascosto da una pagina all'altra?

Ci sono alcuni modi in cui credo e non credo di essere abbastanza ben informato da dirti qual è il migliore, ma spero che quei link che ho fornito ti indicano nella giusta direzione!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top