Domanda

Comprendo il mantra di " non tirare il tuo " quando si tratta di framework di sicurezza del sito.

Per la maggior parte dei casi comunque.

Collaborerò su un sito che integra messaggi di testo nel sistema.

Vorrei utilizzare un framework di sicurezza esistente e ben collaudato per proteggere i dati degli utenti, ma ne ho bisogno anche per proteggere un numero di telefono degli utenti.

Non vorrei essere il responsabile di un elenco di numeri di telefoni cellulari di utenti che vengono intercettati e spammati.

Quali suggerimenti può offrire la community?

È stato utile?

Soluzione

Nota che le tecniche applicate alle password non sono applicabili qui. Puoi memorizzare una password salata e con hash (anche se il valore di farlo può essere contestato), ma non funziona per i numeri di telefono.

Se qualcuno prende il server, può fare tutto ciò che il server può fare. Ciò deve includere il recupero del numero di telefono, ma non include il recupero della password se è stato eseguito correttamente l'hashing. Quindi il numero di telefono è solo un caso particolare di protezione dei dati riservati.

Se i numeri di telefono sono veramente gli unici dati sensibili nell'app, allora potresti guardare a muro fuori dalla parte dell'app che invia i messaggi e crittografare asimmetricamente i numeri di telefono. In un processo diverso (o su un altro computer) eseguire un'app che ha la chiave per decrittografare i numeri di telefono. L'interfaccia di questa app avrebbe forse una funzione che accetta un no crittografato e il messaggio da inviare. Mantieni questa app semplice e testa e controlla il gioco. O nascondilo dal mondo esterno o usa l'autenticazione per provare che la richiesta proviene davvero dalla tua app principale o da entrambi.

Né il db né la parte principale dell'app sono in grado di decrittografare i numeri di telefono (quindi ad esempio non è possibile cercarli), ma possono crittografarli per aggiungerli al db.

La tecnica generale si chiama " Separazione dei privilegi " ;, quanto sopra è solo un esempio.

Nota che i numeri di telefono dovrebbero generalmente essere riempiti con dati casuali prima della crittografia (come salare una password con hash). Altrimenti è possibile rispondere alla domanda "è il numero di telefono crittografato X", senza conoscere la chiave privata. Questo potrebbe non essere un problema da parte del POV degli spammer che rubano la tua lista di distribuzione, ma è un problema dal POV di affermare che i tuoi numeri di telefono sono archiviati in modo sicuro, dal momento che significa che un attacco di forza bruta diventa fattibile: ci sono solo pochi miliardi numeri di telefono e potrebbe essere possibile restringerlo in modo massiccio per un determinato utente.

Mi dispiace che questo non risponda direttamente alla tua domanda: non so se esiste un framework PHP che aiuterà a implementare la separazione dei privilegi.

[Modifica da aggiungere: in effetti, mi viene in mente che sotto l'intestazione di "mantieni semplice l'app privilegiata", potresti non voler usare affatto un framework. Dipende dal fatto che pensi che tu abbia più o meno probabilità di lasciare dei bug nella piccola quantità di codice di cui hai veramente bisogno, che gli autori del framework devono aver lasciato dei bug nella quantità molto più grande (ma più ampiamente usata) di codice che ' ho scritto. Ma questa è un'enorme semplificazione eccessiva.]

Altri suggerimenti

Dato che devi essere in grado di recuperare i numeri di telefono, l'unica cosa che puoi davvero fare per proteggerli (al di là delle normali cose che faresti per proteggere il tuo db) è crittografarli. Ciò significa che è necessario:

  • Assicurarsi che la chiave non perda quando si perde inavvertitamente un dump del database.
  • Assicurati che il tuo sistema non decifri utile i numeri di telefono quando qualcuno riesce a iniettare SQL nel tuo sistema.

Naturalmente si applica ancora la raccomandazione di non distribuire il proprio, utilizzare AES o qualche altro codice ben rispettato con una lunghezza della chiave ragionevole.

Sono lieto di annunciare il rilascio del sistema di sicurezza dei fori per PHP

Questo progetto significa portare a PHP il tipo di sicurezza che viene fornito in Java da Spring Security, precedentemente Acegi Security System per Spring. È progettato per essere attraente per gli utenti di Spring Security perché la filosofia è la stessa. È un modo discreto per aggiungere sicurezza a un sito PHP. La configurazione viene effettuata usando il substrato IoC / DI come Spring Security usa Spring IoC / DI.

Una configurazione di esempio viene fornita con il framework e può essere utilizzata in questo modo:

$context = new substrate_Context(
    './path/to/hole-security/hole-security-config.php'
);

$context->execute();

$hole_Security = $context->get('hole_FilterChainProxy' );
$hole_Security->doFilter();

Assicurati solo che il codice bootstrap del framework sia eseguito prima del bootstrap dell'MVC di tua scelta.

WebSite: http://code.google.com/p/hole-security/

Documentazione: Per il momento puoi utilizzare la documentazione di riferimento di Spring Security dove si applica. Puoi avere un'idea generale usando la documentazione di riferimento di Acegi Security perché la sicurezza dei fori utilizza lo stesso modo di configurazione, ma tieni presente che si basa su Spring Security.

licenza: È rilasciato con licenza Apache versione 2.0.

Caratteristiche: hole-security offre un sistema di sicurezza collegabile in cui è possibile adottare i requisiti di sicurezza del proprio ambiente. Attualmente esiste un sistema di sicurezza molto semplice perché è sulla prima versione ma con le basi di base che ti offre potresti suggerire o richiedere l'aggiunta di nuove funzionalità al progetto.

Funzionalità attualmente disponibili:

  1. Nell'autenticazione dao della memoria come prova di concetto, puoi passare al tuo dao o implementazione preferito che ottiene i dati utente dal database o ovunque tu li memorizzi. Nella versione futures verrà creata un'implementazione basata su DOP.

  2. Filtri configurati da applicare ai pattern url. È possibile collegare il tracciatore di percorsi URL, attualmente fornito con un tracciatore di stili di formica.

  3. Gestione autorizzazioni può essere utilizzato nella propria applicazione per decidere ovunque o meno fare qualcosa, ottenendo sempre il riferimento dal contesto del substrato.

  4. Contesto di sicurezza condiviso accessibile da qualsiasi codice dell'applicazione se viene applicato hole_HttpSessionContextIntegrationFilter. È possibile utilizzare questo contesto per salvare le informazioni relative alla sessione senza utilizzare direttamente l'oggetto sessione.

  5. Puoi utilizzare una pagina di accesso personalizzata e personalizzarla in base alla configurazione hole_AuthenticationProcessingFilter o personalizzare hole_AuthenticationProcessingFilter in base alla tua pagina di accesso personalizzata.

  6. Il codificatore di password predefinito è di testo semplice, senza codifica. Le versioni future avranno implementazioni per la codifica MD5, Sha based, Base64 e altre. Puoi creare il tuo codificatore di password e configurarlo.

  7. Tutti gli oggetti vengono caricati come richiesto, se qualcosa come un filtro non utilizzato per una richiesta non verrebbe caricato. Ciò aumenta le prestazioni dell'applicazione Esistono altre funzionalità correlate alla sicurezza dei fori.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top