Domanda

Quando si registrano nuovi account, le app web spesso richiedono la risposta a una "domanda di sicurezza", ad es.Nome del cane, ecc.

Vorrei esaminare il nostro database e cercare casi in cui gli utenti hanno semplicemente schiacciato la tastiera invece di fornire una risposta legittima: questo è un chiaro indicatore di un account abusivo/fraudolento.

"Cognome della madre da nubile?" Lakdsjflkaj

Qualche suggerimento su come dovrei procedere per farlo?

Nota:Non utilizzo SOLO espressioni regolari per queste "risposte alle domande di sicurezza"

Le "risposte" possono essere:

  1. Selezionato da un database utilizzando alcune espressioni regolari SQL di base

  2. Analizzato tutte le volte necessarie utilizzando le espressioni regolari Python

  3. Confrontato/potato/segnato secondo necessità

Questa è una questione tecnica, non filosofica ;-)

Grazie!

È stato utile?

Soluzione

Sei probabilmente meglio analizzare la distribuzione n-gram, simile al rilevamento della lingua.

Questo codice è un esempio di rilevamento di lingua con trigrammi. La mia ipotesi è la tastiera sbatterci trigrammi sono abbastanza unica e non appaiono in un linguaggio normale.

Altri suggerimenti

Non lo farei - secondo me queste domande indeboliscono la sicurezza, quindi come utente cerco sempre di fornire un'altra semi-password come risposta - per te sarebbe schiacciata.Beh, è ​​schiacciato, ma è esattamente quello che voglio fare.

A proposito.Non sono sicuro del fatto che tu possa interrogare le risposte.Poiché superano la protezione tramite password, dovrebbero essere gestiti come password = archiviati come hash!

Modificare:
Quando leggo Questo articolo Mi sono subito ricordata di queste domande ;-)

L’intero approccio alle domande di sicurezza è piuttosto imperfetto.

ho sempre trovato le persone danno risposte di sicurezza più deboli delle password che usano.
Le domande di sicurezza sono solo un ulteriore anello di una catena di sicurezza: l'anello più debole!

IMO, un modo migliore per procedere sarebbe quello consentire all'utente di richiedere una nuova password inviata al proprio ID e-mail registrato.Ciò ha due vantaggi.

  1. il tentativo di forza bruta deve prima individuare e interrompere il servizio di posta elettronica (e non li aiuterai mai in questo caso: mantieni l'ID di posta elettronica di registrazione molto protetto)
    • l'utente del tuo servizio riceverà sempre un'indicazione quando qualcuno tenta una forza bruta (riceve una mail che dice che ha tentato di rigenerare la propria password)

Se DEVI avere domande segrete, lascia che attivino un invio di password rigenerata (non inviare mai la password dell'utente, rigenerare una password temporanea, preferibilmente forzata una sola volta) all'ID e-mail con cui si sono registrati - e non mostrarlo affatto.

Un altro trucco è quello impostare la domanda segreta STESSO sul proprio ID e-mail registrato.
Se lo mettono bene, invii un rigenerato password temporanea per quell'ID e-mail.

Non c'è modo di fare questo con una regex. A dire il vero, non riesco a pensare a un modo ragionevole per farlo a tutti - in cui si desidera tracciare la linea tra il sospetto e insospettabile? Io, per una volta, spesso rispondo alle domande di sicurezza con una risposta offuscato. Dopo tutto, il nome da nubile di mia madre non è la cosa più difficile da scoprire.

Se è possibile trovare un elenco di lettera coppie probabilità in lingua inglese, si potrebbe costruire un probabilità approssimativa per la parola non essere una parola "reale" inglese, utilizzando le coppie possibili minimi e le coppie che non sono nella lista. Purtroppo, se si dispone di nomi o altri "non-parole", allora non si può imporre loro di essere le parole inglesi.

Forse si potrebbe verificare la presenza di una grande varietà di consonanti. Così, per esempio, nel tuo esempio lakdsjflkaj ci sono 2 vocali (a) e 9 consonanti. Di solito la probabilità di colpire una vocale quando si premono i tasti a caso è molto più basso rispetto a quello di colpire una consonante.

Dejunk è una libreria Ruby da cui è possibile trarre ispirazione. Esso implementa alcune delle proposte in altre risposte. Si ritiene ingresso sia tastiera schiacciare se l'ingresso:

  • Contiene bigrammi caratteri che sono improbabile che appaiono nel testo vero e proprio, ma che sono vicine tra loro su una tastiera. (La libreria comprende un elenco di tali bigrammi.)
  • Inizia con un segno di punteggiatura inaspettato.
  • ha troppe parole molto brevi.
  • non ha vocali.
  • ha caratteri che si ripetono un numero ragionevole di volte.

Si potrebbe verificare la presenza di una lettera maiuscola alla partenza .... che vi porterà alcuni falsi positivi di sicuro.

Una rapida di Google mi ha dato questo , si potrebbe confrontare ogni contro un nome in quella lista .

Ovviamente funziona solo per la domanda di sicurezza avete dichiarato.

Avete anche visto questo:

Anatomia dell'attacco Twitter

Ho intenzione di riflettere la prossima volta che implementano una domanda di sicurezza.

Se la vostra domanda è sempre qualcosa legato ad un vero e proprio, nome umano, questo è impossibile. Prendere in considerazione i nomi asiatiche digitati con caratteri romani; possono benissimo inciampare qualunque filtro si arriva con, ma sono ancora perfettamente legittimo.

Si potrebbe cercare modelli che non hanno senso foneticamente. Come ad esempio:

'q' no con un 'u'.

asdf

qwer

zxcv

asdlasd

In sostanza, tenta schiacciare sulla propria tastiera, vedere quello che si ottiene, e la spina nel filtro. collegare anche in varie regole grammaticali. Tuttavia, dal momento che è nomi hai a che fare con, otterrete sempre 'quel ragazzo' con il nome strano, che causerà un falso positivo.

Invece di espressioni regolari, perché non basta confrontare con una lista di buoni valori noti? Ad esempio, confrontare il nome da nubile della mamma con i dati del censimento, o nomignolo con alcuna delle liste nomignolo si possono trovare online. Per una versione molto più semplice di questo, basta fare una ricerca su Google per tutto ciò che è inserito. nomi legittimi devono avere un sacco di risultati, mentre la tastiera mashing dovrebbe tradursi in pochissimi se del caso.

Come con qualsiasi altro metodo, sarà ancora bisogno di gestire i falsi positivi.

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