Sanatización de consultas SQL

0

Me parece que la inyección de SQL podría evitarse simplemente convirtiendo todo a una codificación simple como base64 que no tiene ningún símbolo dañino.

En la consulta clásica "SELECT * FROM users WHERE username = '${username}'" , si el usuario ingresa, digamos, ' OR 1=1;-- , eso se convertiría en "SELECT * FROM users WHERE username = '' OR 1=1" , y estoy bastante seguro de que la mayoría de ustedes puede ver el problema con eso.

Sin embargo, si se utilizara la codificación base64 simple, se convertiría en "SELECT * FROM users WHERE username = 'JyBPUiAxPTE7LS0='" , y luego podría decodificarse cuando se recupera. Esto también permitiría símbolos y espacios en los nombres de usuario / contraseñas.

A menos que esté juzgando mal algo, esto parece mucho más simple que solo poner en una lista negra ciertas palabras y símbolos.

    
pregunta J. Doe 09.06.2018 - 03:36
fuente

1 respuesta

2
  

Esto también permitiría símbolos y espacios ...   palabras y simbolos ...

¿De qué estás hablando? ¿Qué lista negra? Desde el punto de vista de seguridad, las contraseñas pueden contener cualquier cosa que desee. Para evitar la inyección SQL, cualquier aplicación razonable utiliza declaraciones preparadas : Java, C #, PHP. En su caso, generará el siguiente SQL, que no devolverá ningún resultado (a menos que realmente tenga un nombre de usuario tan extraño):

"SELECT * FROM users WHERE username = ''' OR 1=1;--'"
La

lista negra de algunos símbolos se hace para una mejor capacidad de uso , no por seguridad . ¿Cómo contaría el usuario los espacios, cómo distinguirá si hay 2 o 3 espacios en una secuencia? ¿Cómo ingresaría el usuario el símbolo TAB?

Se hacen listas negras de algunas contraseñas como "123" o "abc" para evitar adivinarlas, para evitar ataques de diccionario.

    
respondido por el mentallurg 09.06.2018 - 14:16
fuente

Lea otras preguntas en las etiquetas