Sé que filtrar una mala palabra clave no es un buen método para prevenir la inyección de SQL. Sin embargo, cuando no pude responder por qué este no es un buen enfoque, aquí está mi regla:
1) Cuando veo ;
, lo hago a ''
(para que nadie pueda hacer otra línea de declaración SQL).
2) cuando veo '
, lo hago a ''
. (Creo que esto debería evitar la fuga de citas).
3) Cuando veo *
, lo hago a *
(para que el pirata informático no obtenga la información de mi mesa).
4) Cuando veo --
, lo hago a -
(para evitar que el pirata informático intente comentar mi declaración).
^ La razón por la que invento estas 4 reglas se debe a una guía SQLi que se encuentra en aquí
Digamos que hago lo siguiente en mi servidor cuando analizo una declaración SQL:
db.exc("INSERT INTO name VALUES ('{}', '{}');".format(firsname, lastname))
Y cuando veo la regla que establezco, creo que es técnicamente seguro prevenir la inyección de SQL en esta declaración. ¿Estoy en lo correcto? Si no puede proporcionar una manera de romperlo? (Conozco las mejores prácticas, pero no puedo entender por qué no lo es). ¿Puede alguien ayudarme con un ejemplo?