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.