Conoscete le tecniche di crittografia utilizzate per convalidare il reindirizzamento dell'URL

3

Aggiungo una funzione di tracciamento dei clic sul mio sito web per tracciare il click-thrus per i miei inserzionisti.

Quindi, sul mio sito, invece di avere un link diretto , collego la mia re-direct page passando l'URL di destinazione come argomento. Questa pagina di reindirizzamento quindi tiene traccia del click thru e quindi 301 reindirizza l'utente all'url esterno corretto.

Voglio impedire a terze parti di sfruttare questo sistema per farlo reindirizzare a URL arbitrari.

Mi piacerebbe il codice che crea i collegamenti a:

Crea special token utilizzando ( destination url + secret )

Quindi, passa gli argomenti destination url + special token come parametri della stringa di query alla mia pagina di reindirizzamento in pubblico.

Dopo aver ricevuto gli argomenti, la pagina di reindirizzamento effettuerà un controllo:

Dato ( destination url + special token + secret ), destination url è:

  • buono - reindirizzalo a destinazione
  • non valido - non reindirizzarlo a destinazione

e dovrebbe non essere possibile per Doctor Evil per:

Crea secret utilizzando ( known valid destination url + its special token )

Idealmente la pagina re-direct non dovrebbe effettuare alcuna ricerca specifica per url sui dati per convalidare i parametri - dovrebbe solo essere in grado di dire da "i due parametri dati + il segreto + l'algoritmo noto".

Non sono molto informato sulla crittografia, quindi mi chiedevo quale tipo di metodo si sarebbe utilizzato per creare e convalidare i parametri dati il segreto condiviso.

Sono sicuro che questa è una tecnica comune ma non ho idea di cosa si chiami, quindi è difficile saperne di più.

Qualsiasi aiuto è apprezzato.

    
posta JW01 21.09.2011 - 22:35
fonte

3 risposte

1

Come ha scritto Jerry, una funzione MAC è il modo più semplice per farlo.

In PHP ci sono funzioni di libreria disponibili per questo. Ti suggerirei di usare HMAC (vedi hash_hmac () nel manuale PHP ) usando MD5 o sha256 come algoritmo di hashing corrispondente (questo è il primo argomento della funzione).

Se sei interessato a ulteriori dettagli sui codici di autenticazione dei messaggi o sugli algoritmi di hashing, ti suggerisco di leggere gli articoli di Wikipedia per una buona panoramica.

    
risposta data 22.09.2011 - 13:12
fonte
5

Il modo ovvio sarebbe utilizzare un codice di autenticazione dei messaggi (MAC - un TLA pesantemente sovraccarico, se mai ce ne fosse uno). Un MAC è fondamentalmente un algoritmo di hash con chiave. Mantieni la chiave privata e quando aggiungi un URL al tuo sistema, dai il proprietario di quell'URL l'hash del loro URL usando la tua chiave. Restituiscono l'autenticazione insieme all'URL. Quando lo ottieni, re-hash l'URL usando la tua chiave e verifica che corrisponda a ciò che hanno passato. Se non corrisponde, lo rifiuti.

Se non si dispone di un codice per un MAC facilmente disponibile, un modo semplice per produrne uno da primitive tipiche è eseguire un hash non cifrato (ad esempio SHA-256) quindi crittografare il risultato con un normale algoritmo di crittografia (ad es. , AES).

Potresti voler sottoporre a pre-elaborazione l'URL per consentire alcune variazioni minori. Ad esempio, in un caso tipico in cui la maiuscola non ha importanza, non si desidera iniziare a rifiutare un URL solo perché qualcuno ha modificato qualcosa come "MyUrl" in "MyURL". Pertanto, è possibile (per una possibilità) convertire prima l'intero URL in lettere minuscole.

    
risposta data 21.09.2011 - 22:44
fonte
0

Sì, ho inventato a metodo per farlo. A differenza della soluzione MAC di Jerry, ho creato il codice di autenticazione usando la crittografia a chiave pubblica / privata. Se si crea il codice di autenticazione con la propria chiave privata, la convalida richiede solo una chiave pubblica. Ciò significa che anche se il tuo server è compromesso e la chiave pubblica verrebbe ottenuta, non consentirebbe a terze parti di creare nuovi URL firmati.

Potresti voler verificare con un avvocato se quella domanda di brevetto sarebbe un problema per te.

    
risposta data 22.09.2011 - 22:20
fonte

Leggi altre domande sui tag