Califique esta estrategia de prevención de inyección SQL

2

Recientemente, un representante de un proveedor me dijo que la razón por la que un usuario no pudo iniciar sesión en su sitio era que la contraseña (que verifica mediante una conexión LDAP a nuestro servidor) contenía dos guiones consecutivos.

  

Lo siento por no volver antes. Resulta que el "-" en la contraseña de [BORRADO] está causando un problema con nuestro script de desinfección (que saca todo lo que parece código, lo que podría causar problemas al guardarlo en la tabla de la base de datos). >

¿Qué tan preocupado estaría?

    
pregunta Wumpus Q. Wumbley 22.06.2017 - 19:29
fuente

1 respuesta

3

Esto sugiere que sus prácticas de desinfección no son muy específicas. En particular, nunca debe tener que desinfectar una contraseña. Las contraseñas se deben marcar inmediatamente y solo se debe almacenar el hash. Como resultado, el campo SQLi a través de la contraseña debería ser imposible.

Ahora, normalmente la defensa en profundidad sugiere que tomar medidas adicionales para la seguridad es algo bueno, incluso si parece redundante. Por lo tanto, una respuesta ingenua sería "están teniendo cuidado con la seguridad aquí, incluso si es potencialmente innecesaria, ¿cuál es el problema?". El problema es que la eliminación innecesaria de caracteres de las contraseñas (suponiendo que en realidad no rompió nada) hace que las contraseñas sean más débiles. Si su sistema "limpió" correctamente la entrada tanto cuando se almacenó la contraseña como cuando el usuario inició sesión, entonces el inicio de sesión funcionará normalmente, pero la contraseña de "mi - contraseña" probablemente se convierta en "mypassword" antes del hashing. Como resultado, la contraseña limpia es más fácil de descifrar que la original.

El otro problema es que la forma en que lo redactaron sugiere que tienen un script de desinfección que simplemente "limpia" a ciegas todo. Esta es realmente la manera en que el hombre perezoso hace seguridad. He visto muchos sistemas que utilizan ese enfoque, y en mi experiencia, generalmente significa que el resto de la seguridad no está muy bien pensado.

Finalmente, realmente es una medida de seguridad inútil, y los pasos que hacen que las cosas se vean bien sin mejorar la seguridad en realidad no ayudan a nadie. La razón por la que están eliminando un doble guión es porque en SQL esto es un comentario, y como resultado se a veces se utiliza como parte de un ataque de Inyección de SQL. Eliminar los caracteres del comentario no es un método muy efectivo para derrotar dicho ataque de SQLi. Necesitan rechazar tales solicitudes todos juntos. También es mejor que utilicen las declaraciones preparadas correctamente, en cuyo caso eliminar doble guiones es doblemente inútil.

Ciertamente no es una excusa para un error: eso solo significa que no pudieron implementar correctamente una característica de seguridad menos que ideal. Esperamos que te hayan hecho ese comentario como "gracias por señalar este error para que podamos solucionarlo". Incluso si quieren mantener su algoritmo de "limpieza", no debería romper nada.

    
respondido por el Conor Mancone 22.06.2017 - 19:56
fuente

Lea otras preguntas en las etiquetas