Prueba de inyección SQL

Estoy tratando de demostrar aquí que esta simple función no es lo suficientemente buena como para evitar todas las inyecciones de sql en el mundo:

Function CleanForSQL(ByVal input As String) As String
    Return input.Replace("'", "''")
End Function

Aquí hay una declaración de inserción típica de una de nuestras aplicaciones:

Database.DBUpdate("UPDATE tblFilledForms SET Text1 = '" + CleanForSQL(txtNote.Text) + "' WHERE FilledFormID = " + DGVNotes.SelectedRows(0).Cells("FilledFormID").Value.ToString)

Sé que no es seguro, debido a las búsquedas en Google y otras preguntas en StackOverflow.com.aquí es una pregunta que encontré en la que todas las funciones como la que presenté anteriormente son irrelevantes e inútiles.

Basándome en la publicación a la que he vinculado, simplemente escribiendo

'Chr (8); actualizar tblMaint SET Value1 = 2 WHERE ValueID = 2--

en txtNote debería ser suficiente para borrar todos los valores en text1 en toda la tabla tblFilledForms, y luego actualizar la segunda fila de la tabla tblmaint para que sea 2 correcta?

Lo que DEBERÍA suceder aquí es que VB interpretará esto como

ACTUALIZAR tblFilledForms SET Text1 = '' 'Chr (8); actualice tblMaint SET Value1 = 2 WHERE ValueID = 2-- 'WHERE FilledFormID = 5120327

y enviarlo a SQL, que ejecutará internamente el Chr (8) para borrar el tercero 'que produciría

ACTUALIZAR tblFilledForms SET Text1 = ''; actualice tblMaint SET Value1 = 2 WHERE ValueID = 2-- 'WHERE FilledFormID = 5120327

para ser ejecutado en la base de datos correcta?

Luego copié un Chr (8) del portapapeles y reemplacé el Chr (8) en el cuadro de texto con el contenido del portapapeles y todavía no puedo. Pone toda la cadena directamente en el campo sin problemas.

Entonces, ¿qué estoy haciendo mal aquí? ¿O qué más puedo hacer para romperlo?

Tecnologías y antecedentes: estoy utilizando MS SQL Server 2005 y VB .NET 2005. el campo Texto1 en la base de datos es un campo Varchar (600) (no pregunte por qué no es MAX, no tiene sentido, lo sé). Hay ciertos activadores en la tabla que evitarían una actualización masiva como esta y arrojarán algunos errores si la inyección realmente funcionó correctamente.

PD. Sé que las consultas parametrizadas son el camino a seguir aquí y no estoy buscando respuestas como "bueno, no sé por qué no funciona, pero las consultas parametrizadas son el camino a seguir". Estoy buscando la capacidad de demostrar que nuestro software está dañado y que debemos reescribirlo usando mejores principios.

Para cualquier persona que lea esta pregunta para descubrir cómo filtrar mejor los campos de texto, ¡la respuesta es NO! ¡Usa los parámetros! ¡Son mucho mejores, más seguros y más fáciles!

Respuestas a la pregunta(5)

Su respuesta a la pregunta