Mi equipo actualmente usa ASP.NET con MS SQL Server para nuestro software. La seguridad solo ha adquirido importancia desde que empecé, en la que hay vulnerabilidades de inyección en todas partes.
Debido a la integración actual con Oracle y MS SQL, la decisión empresarial nunca fue utilizar consultas parametrizadas. Esto, por supuesto, ha sido un problema.
La implementación de Buscar y reemplazar junto con la inclusión en la lista blanca de parámetros ha reducido este problema en gran medida.
Mi único problema es que he leído mucho sobre Unicode y otras codificaciones que son la causa de la inyección de SQL. No entiendo muy bien esto. Actualmente desinfectamos todo esto:
Const pattern As String = "^[a-zA-Z0-9.=,:\s\\/\']*$"
term = term.Replace("'", "''")
If Not Tools.ValidString(term, pattern) Then
term = String.Empty
End If
Public Shared Function ValidString(ByVal source As String, ByVal pattern As String) As Boolean
If source = String.Empty Then Return True
Dim params As Text.RegularExpressions.RegexOptions = Text.RegularExpressions.RegexOptions.None
Dim regex As New Text.RegularExpressions.Regex(pattern, params)
Dim match As Text.RegularExpressions.Match = regex.Match(source, pattern, params)
Return match.Success
End Function
¿Alguien tiene un ejemplo en el que se pueda usar unicode / inyección codificada, o simplemente un ejemplo en el que esta expresión regular no pueda evitar la inyección de sql?
Gracias
ACTUALIZAR
¿Puedo por favor no tener respuestas relacionadas con la inyección estándar de SQL? Ya estoy muy familiarizado con esto. TAMBIÉN por favor deja de publicar diciendo que no uses desinfección de cuerdas. No hay recursos en la compañía para cambiar todas las consultas a consultas parametrizadas con ADO.NET, mientras que también se construye la lógica para que use ODP.NET si el cliente usa oracle. OWASP menciona el uso de la lista blanca de caracteres si la parametrización está fuera de cuestión, por lo que como en la expresión regular, solo se permiten unos pocos caracteres. No estoy en la lista negra de personajes, ya que esto es estúpido.
No se requiere el cumplimiento de los datos que tenemos. La seguridad es para la integridad de la base de datos, ya que sería una pesadilla si se cambiara el contenido.
Nuestro software es una aplicación de nube muy grande CMS y DMS en una, donde el 99% del software se usa internamente, y solo una minoría es externa y solo se usa para la revisión pública y comentarios de los documentos.
De mi nueva comprensión de la inyección de Unicode. Solo puede ocurrir si los datos se están codificando antes de colocarlos en la consulta y, por lo tanto, la inyección Unicode solo ocurre realmente en aplicaciones con globalización de datos. Estoy pasando los campos de cadena sin procesar directamente a la consulta de cadena después de la desinfección anterior.
¿Puedo por favor solo recibir una respuesta de un experto en inyecciones, quién puede respaldar mi afirmación de que Unicode no se aplicará en mi caso?