Pregunta

Al registrarse para obtener nuevas cuentas, las aplicaciones web suelen solicitar la respuesta a una "pregunta de seguridad", es decir,Nombre del perro, etc.

Me gustaría revisar nuestra base de datos y buscar casos en los que los usuarios simplemente presionaron el teclado en lugar de dar una respuesta legítima; este es un alto indicador de una cuenta abusiva/fraudulenta.

"¿Nombre de soltera de la madre?" lakdsjflkaj

¿Alguna sugerencia sobre cómo debo hacer esto?

Nota:No estoy usando SÓLO expresiones regulares en estas 'respuestas a preguntas de seguridad'

Las 'respuestas' pueden ser:

  1. Seleccionado de una base de datos usando algunas expresiones regulares SQL básicas

  2. Analizado tantas veces como sea necesario usando expresiones regulares de Python

  3. Comparado/podado/puntuado según sea necesario

Esta es una cuestión técnica, no filosófica. ;-)

¡Gracias!

¿Fue útil?

Solución

es probablemente mejor de analizar la distribución de n-gramas, similar a la detección de idioma.

Este código es un ejemplo de detección de idioma utilizando trigrams. Mi conjetura es el teclado destrozando trigramas son bastante único y no aparecen en el lenguaje normal.

Otros consejos

Yo no haría esto - en mi opinión estas preguntas debilitan la seguridad, así como un usuario siempre trato de proporcionar otra semi-contraseña como una respuesta - para usted que le gustaría puré. Pues bien, es en puré, pero eso es exactamente lo que yo quiero hacer.

Por cierto. No estoy seguro sobre el hecho, que se pueden consultar las respuestas. Dado que superan la protección por contraseña deben ser manejados como contraseñas = almacena como un hash!

Editar
Cuando leí este artículo instante me acordé de esta pregunta; -)

Todo el enfoque de las cuestiones de seguridad es bastante deficiente.

Siempre he encontrado personas ponen respuestas de seguridad más débiles que las contraseñas que utilizan .
preguntas de seguridad son sólo un eslabón más de una cadena de seguridad - el eslabón más débil!

OMI, un mejor camino a seguir sería la de permite al usuario solicitar una nueva contraseña enviada a su ID de correo electrónico registrada . Esto tiene dos ventajas.

  1. el intento de fuerza bruta tiene que localizar y romper el servicio de correo electrónico en primer lugar (y, nunca se les ayudará a no - mantener el ID de correo electrónico de registro muy protegido)
    • el usuario de su servicio será siempre obtener una indicación cuando alguien trata de una fuerza bruta (que reciben un mail diciendo que trató de regenerar su contraseña)

Si usted debe tener preguntas secretas, dejar que desencadenan una re-generados (nunca envía la contraseña del usuario, regenerar una, preferentemente de una sola vez forzada temporal) contraseña de su expedición al id de correo electrónico se registraron con - y, por lo no mostrar eso en absoluto.

Otro truco es hacer la pregunta secreta MISMA su domicilio ID de correo electrónico .
Si ponen las cosas bien, se envía un re-generada contraseña temporal a la id de correo electrónico.

No hay manera de hacer esto con una expresión regular. En realidad, no puedo pensar en una forma razonable de hacer esto en absoluto - ¿dónde trazar la línea entre sospechosa y no sospechoso? Yo, por una vez, suelen responder a las preguntas de seguridad con una respuesta ofuscado. Después de todo, el nombre de soltera de mi madre no es lo más difícil de averiguar.

Si se puede encontrar una lista de probabilidades carta de par en Inglés, se puede construir una probabilidad aproximada de la palabra no es una palabra "real" Inglés, utilizando los pares posibles de mínimos y parejas que no están en la lista. Por desgracia, si tiene nombres u otras palabras "no", entonces no se puede obligar a ser palabras en inglés.

Tal vez usted podría comprobar si hay una gran cantidad de consonantes. Así, por ejemplo, en su ejemplo lakdsjflkaj hay 2 vocales (a) y 9 consonantes. Por lo general, la probabilidad de golpear a una vocal al pulsar teclas al azar es mucho menor que la de golpear una consonante.

Dejunk es una biblioteca de Ruby desde el que puede inspirarse. Pone en práctica algunas de las sugerencias de otras respuestas. Se considera que la entrada sea de maceración teclado si la entrada:

  • Contiene Bigramas de caracteres que son poco probable que aparezca en el texto real, pero que están muy juntos en un teclado. (La biblioteca incluye una lista de tales bigramas.)
  • Se inicia con un signo de puntuacion inesperado.
  • tiene demasiadas palabras muy cortas.
  • no tiene vocales.
  • ¿Ha caracteres que se repiten un número excesivo de veces.

Se puede comprobar si hay una letra mayúscula al inicio .... que les permite conocer algunos falsos positivos con seguridad.

Una rápida de Google me dio este , se podría comparar cada uno contra un nombre en esa lista .

Es evidente que sólo funciona para la pregunta de seguridad que se indique.

¿Usted también ha visto esto:

Anatomía del ataque Twitter

Voy a pensar muy bien la próxima vez que poner en práctica una pregunta de seguridad.

Si su pregunta es siempre algo relacionado con un nombre real, humana, esto es imposible. Considere nombres asiáticos escritas con caracteres latinos; pueden muy bien tropezar cualquier filtro que llegar a, pero todavía está perfectamente legítimo.

Se podría buscar patrones que no tienen sentido fonéticamente. Tales como:

'q' no seguida de una 'U'.

asdf

qwer

zxcv

asdlasd

Básicamente, intenta hacer puré en su propio teclado, ver lo que hay, y que conecta en su filtro. También enchufar varias reglas gramaticales. Sin embargo, ya que es nombres que está tratando, usted consigue siempre 'ese tipo' con el nombre raro que hará que un falso positivo.

En lugar de expresiones regulares, ¿por qué no comparar con una lista de valores buenos conocidos? Por ejemplo, comparar el apellido de soltera de la madre con los datos del censo, o nombre de mascota con cualquiera de las listas de nombres de mascotas se pueden encontrar en línea. Para una versión mucho más simple de esto, sólo hacer una búsqueda en Google de lo que se ingresó. nombres legítimos deben tener un montón de resultados, al tiempo de maceración teclado debe dar lugar a muy pocos o ninguno.

Al igual que con cualquier otro método, todavía se necesita para manejar los falsos positivos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top