Se me ha mostrado una expresión regular que, según la persona que la escribió, debería protegerse contra las inyecciones SQL en el servidor SQL Server 2008. Realmente no lo parece, pero me pregunto exactamente qué código puedo superar. para demostrar que no protege.
value = Regex.Replace(userInput, "[\n\r\t\']", " ");
sqlCmd = "Select names from mytable where mycolumn like '%" + value + %'";
SQLDataAdapter results = new SQLDataAdapter(sqlCmd, connString);
Ahora, me he dado cuenta de que si puedo obtener una sola cita pasada, puedo hacer algo como
a' union all select passwords as names from myusertable;--
El problema es que la expresión regular captura la comilla simple y no tengo ni idea de cómo escapar / codificar / ect. para que pase la expresión regular. He estado buscando algo, pero todo parece suponer que puede obtener una sola cita pasada. Obviamente, no puede ser tan sencillo detener todos los ataques de inyección de SQL, pero personalmente no sé qué poner para superarlo. ¿Alguna ayuda?
Editar:
Para ser un poco más específico, he oído que se pueden usar caracteres Unicode para pasar una sola cita más allá de un cheque en muchos idiomas, ya que el lenguaje de programación los trata como tales, pero cuando se ponen a la base de datos, sólo se tratan como una cita. Pero no he encontrado nada más que teoría sobre esto. Cuando trato de explicarlo, suena como "Bueno, la gente piensa que esto podría suceder, pero nunca se ha demostrado que sea realmente una vulnerabilidad" y eso no convence a la persona mayor que lo programó.