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.