2012-12-30 10 views
5

Mi piace creare un URL sicuro per un utente per le sue voci (cancella e modifica i collegamenti).Come generare URL privati ​​sicuri in CakePHP?

per ex, questo è il mio URL reale

http://localhost/project/blogs/delete/1/test-title 

quello che voglio fare è,

http://localhost/project/blogs/delete/4324143563443/test-title (some hash made of salt+user auth id) 

Il mio scopo principale è quello di creare un hash sicuro insieme con l'URL per eliminare e modificare metodo. C'è qualche metodo personalizzato disponibile? Ho cercato nelle funzioni CakePHP sicurezza http://book.cakephp.org/2.0/en/core-utility-libraries/security.html e non so se è il modo giusto per farlo o non sicuro, che algoritmo di utilizzare)

+0

Perché stai facendo questo? Quindi l'utente non può vedere l'id del post che sta per eliminare? In generale, non è possibile annullare l'hash di un hash. –

+0

Solo per eliminare e modificare i collegamenti intendevo. Quindi, chiunque non può cancellare o modificare il mio post. Naturalmente, posso fare quel controllo nel mio controller stesso, ma, voglio rendere l'URL sicuro. –

+0

Non posso dire di vedere una luce alla fine del tunnel per questa tecnica. Potresti passare un parametro chiamato come http: // localhost/project/blogs/delete/1/hash: 4324143563443', ma non servirebbe davvero molto scopo. Personalmente creerei una tabella 'roles' e assegnerei ruoli agli utenti. –

risposta

8

In primo luogo, anche se non sono del tutto chiaro su come/perché si vuole fare questo, sembra che tu voglia "proteggere" questi link oscurando i loro URL. Questo è noto come "Security through Obscurity" ed è generalmente disapprovato.

In Cake (e nella maggior parte delle app), il modo consueto per ottenere ciò è consentire agli utenti di accedere (vedere: Auth Component) e quindi, ad esempio, nell'azione di eliminazione (ad esempio per le richieste URL/delete/1) verrebbe controllato per una sessione utente valida e che l'utente disponga di autorizzazioni sufficienti per l'eliminazione.

Anche se vorrei fortemente raccomandare altrimenti, se volessi creare questi URL oscuri dovresti probabilmente usare Security::hash();. Il problema con questo è che non si può semplicemente cancellare l'id e quindi determinare direttamente l'id dall'hash (questo è il punto!). Dovresti invece archiviare gli hash nel database e quindi eseguire una query per l'hash (ogni post potrebbe avere un hash univoco generato dall'ID o solo da dati casuali).

2

Come già accennato "Sicurezza per oscurità" non è molto intelligente. Tuttavia, il modo più semplice per ottenere ciò che si desidera è utilizzare gli UUID per la chiave primaria della tabella anziché l'incremento automatico numerico.

+0

Probabilmente vale la pena notare che mentre si utilizza UUID significherebbe che la sequenza di chiavi primarie era imprevedibile, l'URL "protetto" sarebbe comunque prevedibile dall'URL "pubblico", che sono abbastanza sicuro è quello che l'OP desidera evitare. Penso che il modo più semplice per legare qualcosa di imprevedibile a ogni ID sarebbe archiviare qualcosa (hash, ecc.) Nel db. –

+0

Giusto. Comunque il suo approccio è schifoso in primo luogo, quindi in qualsiasi modo si genera l'url non sarà veramente sicuro :) – ADmad

+0

Molto vero ......... :) –

Problemi correlati