2011-12-03 14 views
32

Ho un sito che permette agli utenti di controllare le loro statistiche (numero di file caricato, il numero di file che hanno, quote, tipo di accesso, ecc ...)api implementazione di sicurezza php

ho creare una sezione sul mio sito: api.domain.com

questo può essere l'accesso tramite ricciolo o un browser web dal momento che sto tornando un oggetto jSON o XML (a seconda delle preferenze dell'utente)

mia domanda è questa: dovrei limitare la accesso usando un utente/pass o dovrei creare un hash del file utente?

ad esempio:

scenario 1:

all'utente di creare un ricciolo php che trasmette utente e passare tramite posta o il ricciolo di autenticazione e tornare i risultati, analizzarlo ecc ...

per me questo è sicuro, ma l'utente deve mantenere il suo script se cambiano il loro passaggio

scenario 2

L'accesso degli utenti in un file del tipo: api.domain.com/j355HGssgf3HESAjh45jusf4325GSj5hbsHhdh5HGHFS3732he4548475wbe3447nSNe5XfgjhGJ e quindi accedere ai dati

Questo, niente di mantenere

+0

+1 bella domanda! –

risposta

40

Ecco il mio pensiero su questo.

Se si restituisce una pagina non trovata o un messaggio di errore (con un buono stato 200 OK) quando viene effettuata una richiesta alla tua pagina, potrebbe inviare a robot o persone non truccate un indizio su cosa possono ottenere e prova ancora e ancora e ancora ...

D'altra parte, se si invia un accesso negato, come un 401, o meglio un codice di errore 500 per simulare un errore del server, questi robot o persone non trustable potrebbero andare via per sempre.

Dirò che il metodo utente/password è un po 'più sicuro in questo caso.

Ora, ti fiderei semplicemente immettendo una stringa grande (come lo scenario 2) quando controlli la posta? o le informazioni del tuo conto bancario?

37

Se sono stato io vorrei dare ogni account la possibilità di creare una chiave unici API,

api.domain.com/?key=<API.KEY> 

per più misura di sicurezza si potrebbe fare accettare unico collegamento tramite il metodo post con la chiave API. Se contattati via get quindi mostrare un errore ecc

Poi se cambiano il loro passaggio/nome utente non influenzerà le loro API chiave

+0

Ma cosa succede se qualcuno ha rubato la tua chiave API? Sto cercando alcune informazioni su questo argomento perché ho 2 server e voglio comunicare via POST alcune informazioni sensibili. Ma non capisco, uso un'API per recuperare le informazioni, ma se qualcuno annusa la chiamata può recuperare informazioni sensibili con la chiave API – Kreker

+1

Se si tratta di informazioni sensibili, vorrei usare ssl e crittografare i dati, decifrare su l'altra estremità. Se sai che una chiave API è stata rubata ri-generare una nuova :) –