Esecuzione dello script PHP WeService facendo clic su un collegamento all'interno di un'e-mail

-1

Ricevo e-mail dalla mia applicazione PHP / MySQL con determinati collegamenti. Stavo pensando di includere un UUID come parte del link, che indicherebbe un servizio Web che legge SOLO quegli UUID. Questi UUID verranno archiviati nel database e il server del servizio Web capirà cosa fare per ciascun UUID (eseguirà un'istruzione SQL collegata a quell'UUID). Una volta ricevuto l'UUID e eseguito lo script, l'UUID verrà contrassegnato come non attivo per evitare che chiunque esegua la stessa query

Ciò può significare che il client del servizio Web non richiede le credenziali dell'utente per l'autenticazione (all'utente che fa il clic effettivo sul link). È troppo insicuro? È incline all'iniezione sql o all'hacking facile? Dovrei usare schemi di crittografia aggiuntivi Nota che la mia applicazione non è abilitata SSL

Se possibile, quali componenti / quadri raccomanderesti? Voglio dire, sarebbe SAPONE, WSDL, RIPOSO, ecc.? Esistono alternative ai servizi Web per questo?

    
posta Agustin Garcia 09.01.2014 - 13:00
fonte

2 risposte

1

Contrassegnare l'UUID come inattivo dopo l'accesso iniziale sarà efficace solo se si è il primo utente ad accedere al collegamento. Se qualcun altro riesce a dirottare il tuo messaggio e-mail e ad accedere al link prima di te, non sarà più possibile ottenere una quantità di crittografia aggiuntiva intorno al tuo servizio web.

Potresti crittografare l'email che ti è stata inviata (in formato S / MIME, PGP o GPG ad esempio). Ciò aumenterebbe la probabilità che tu sia il primo ad accedere ai collegamenti, ma se qualcuno sta intercettando la tua connessione (o la connessione al tuo server) saranno comunque in grado di vedere il risultato dell'accesso al tuo link.

Finché il tuo servizio web utilizza solo l'UUID fornito dall'esterno e cerca l'SQL effettivo da eseguire dal database, allora non vedo il servizio web come un problema di sicurezza, ma dipenderà da un numero sufficientemente casuale nonces / UUID in modo che un utente malintenzionato non possa prevederlo facilmente.

Inoltre, potresti considerare di avere un tempo massimo per mantenere nonces / UUID generati, sia per assicurarsi che il tuo database non cresca all'infinito, ma anche per assicurarti che i collegamenti che non hai mai fatto clic si disattivano.

    
risposta data 14.01.2014 - 07:18
fonte
0

Questo scenario impone molteplici problemi possibili. Indipendentemente dal fatto che sia soggetto a SQL Injection o hacking, non è possibile fornire una risposta in quanto è completamente dipendente dall'ambiente e dal codice.

L'intercettazione potrebbe verificarsi sul lato server durante la generazione dei collegamenti, attraverso il canale di posta o sul proprio computer.

Quando limiti i link che invii e prevedi di fare clic su di essi in ogni caso, anche se un hacker otterrebbe il link e lo userà prima di usarlo (prima che l'UUID sia scaduto), tutto quello che l'hacker può fare è eseguire la query che hai memorizzato in un database. Quindi potrebbe non esserci alcun vettore di attacco qui (a parte l'UUID che ha indovinato come @wj. Ha sottolineato)

Se i collegamenti ti portano in qualche area amministrativa, sei fregato perché non fornisci alcuna autenticazione e cerchi di ottenere sicurezza per oscurità (mantenendo segreti i link).

Un modo per ridurre il rischio (in un modo probabile probabile) è quello di proteggere il canale di trasmissione crittografando la posta con una crittografia asimmetrica, come PGP ecc., questo è descritto da @wj. Evelo e perdi ancora perché non hai protetto la risorsa (il server) ma solo il messaggio che porta al server.

Quello che considero un modo migliore è mettere l'autenticazione intorno al server in termini di credenziali di accesso o qualche altro tipo di autenticazione.

La risorsa deve essere protetta? Perché non è già protetto?

Quale framework dovresti usare dipende dal tuo ambiente, è PHP? Perl? ASP? Suggerirei di utilizzare i framework MVC esistenti per determinati linguaggi che includono il concetto di autenticazione (Symfony, Zend, ASP MVC, ecc.). Tuttavia, tieni presente che tutti questi framework non sono banali e richiedono una certa comprensione, dal momento che il semplice utilizzo di un framework può esporre più informazioni sul tuo server e quindi aumentare i vettori di attacco.

Naturalmente potrebbero esserci strumenti totalmente semplici e integrati adatti alle tue necessità, come usare il meccanismo htaccess di apache per fornire una protezione semplice ma efficace delle risorse. Questo potrebbe proteggere il collegamento che viene chiamato senza credenziali appropriate, ma non necessariamente protegge il tuo server in quanto potresti avere una password di root debole, una password di amministrazione del database debole, ecc.

I modi per essere compromessi sono così enormi. Anche se proteggi bene la tua risorsa, avere un CMS, un web-mailer o qualsiasi altro sistema installato sulla stessa macchina può fornire un vettore di attacco anche se hai ben protetto il tuo link (potresti finire con una porta sicura ma lascia aperte tutte le finestre, parlando in analogie:))

    
risposta data 14.01.2014 - 12:47
fonte

Leggi altre domande sui tag