Su enfoque a este problema es muy malo. Está intentando encontrar letras en la complejidad de tiempo lineal: O(n)
. Comparando letras, una tras otra. Significa, que en el modelo pesimista tienes que revisar todo el alfabeto. Supongamos que su alfabeto se compone solo de letras minúsculas: {a,z}
, y su contraseña es zzz
. Tendrás 26 intentos para encontrar la primera letra, 26 intentos para encontrar la segunda letra y 26 intentos para encontrar la última.
Como se mencionó anteriormente, puede acelerar este proceso. Tenga en cuenta que el orden de las letras en el alfabeto siempre es el mismo (las letras están ordenadas). Puede usar la búsqueda binaria con O(log(n))
complejidad de tiempo. Este método es utilizado por la mayoría de las personas. Sin embargo, también puedes acelerarlo.
Si sabemos que la contraseña de búsqueda es la palabra del diccionario, podríamos utilizar el análisis lingüístico para construir nuestros intentos de inyección de sql sq. Podríamos utilizar nuestro conocimiento sobre la frecuencia de las letras en el texto (por ejemplo, la letra más frecuente en inglés es ‘e’). También podríamos usar el conocimiento: ¿cuál es la probabilidad de que después de la letra X, aparezca la letra Y? También podríamos intentar adivinar cuántas letras X hay en nuestra palabra. En este enfoque las expresiones regulares pueden ayudarnos mucho. Definimos el rango de caracteres que coincidirán con las funciones LIKE
(para MSSQL
) o REGEXP
(para MySQL
). Aquí se puede encontrar una explicación bastante agradable sobre la expresión regular en ataques de inyección de SQL: enlace