2011-02-09 14 views
5

Sto solo cercando di fare un po 'di sicurezza sul mio sito web e cercando di capire il percorso migliore per assicurare un ID.Encrypt/codifica un ID nella stringa URL

ESEMPIO: http://localhost/page.php?id=90 TO: http://localhost/share/22349234987sdsdf9sdf87423498asf9

Sto usando HTACCESS a fare la parte delle azioni. Ma vorrebbe nascondere il '90' e cercare di scoraggiare chiunque semplicemente aggiungendo numeri casuali per provare a ricevere una risposta diversa.

Qualche idea su come creare qualcosa di simile o se qualcosa esiste già che funziona bene con l'implementazione?

La sicurezza è un fattore, così solo cercando di trovare la soluzione migliore là fuori ...

+0

Come no? sta mostrando un semplice ID, che chiunque può cambiare ... – Justin

+0

@Justin: e allora? Puoi cambiare 'id' qui, in SO. Qualche problema con esso? – zerkms

risposta

3

Nascondere l'ID è oscurità, non sicurezza.

Se si desidera una buona oscurità, consultare le funzioni mcrypt in PHP. Assicurati di aggiungere un sale prima della codifica e della decodifica, altrimenti sarà facile indovinare la crittografia/decrittografia.

E sappi che qualcun altro potrebbe ancora imbattersi negli URL, sconfiggendolo completamente. Userei qualche forma di HTTP Auth su HTTPS se vuoi anche la sicurezza.

+0

Sì, l'ho implementato su una struttura HTTPS, solo per questo motivo mi chiedevo come "oscurare" l'ID nel modo migliore. Approfondirò l'ID MCrypt. Grazie – Justin

2

Un mio amico ha implementato un metodo di firmare tutte le richieste GET con la sessione corrente token e un segreto per prevenire CSRF attacchi.

Ma quello che stai cercando di fare è avere un URL che puoi condividere con altre persone.

È possibile creare un hash MD5 simile all'URL originale e salvare entrambi nel database.

Ora quando viene aperto/share/someLongId, è possibile controllare nel database dove si trova l'URL che hash e può reindirizzare l'utente a quell'URL.

Un'altra possibilità è utilizzare i GUID anziché gli ID di auto-incremento in primo luogo. In questo modo tutti gli ID sono solo più lunghi e non così facili da indovinare.

1

A seconda se ne avete bisogno (l'URL) per essere persistenti o no, è il freddo fa sia:

non persistente: fare qualcosa di simile:

function getLink($id) { 
    $random = md5(uniqid()); 
    $_SESSION['links'][$random] = $id; 
    return "http://localhost/share/$random"; 
} 
echo getLink(10); 

e poi:

function getTrueId($id) { 
    if(isset($_SESSION['links'][$id]) { 
    return $_SESSION['links'][$id]; 
    } else { 
    die("Unknown link!"); 
    } 

}

Questo renderà link utilizzabile solo per l'utente corrente nella sessione corrente. Se ne hai bisogno persistente, puoi generare ID casuali e archiviarli nel database insieme a ID reali, ma questo potrebbe essere inutile, poiché l'ID casuale può essere usato al posto dell'ID reale per fare le stesse cose ...