Cómo Prevenir la Inyección SQL en OneStream
La inyección SQL en OneStream representa un riesgo cuando una regla de negocio concatena valores controlados por el usuario directamente en una consulta. Las consultas parametrizadas mantienen la sentencia SQL separada de sus valores, de modo que el controlador trate la entrada como datos y no como código ejecutable.
Esto surgió recientemente con un cliente. Estaban realizando una auditoría de seguridad sobre las reglas de negocio de OneStream escritas en su aplicación y la auditoría estaba fallando por SQL Injection. Entonces, ¿qué es SQL Injection y cómo lo evitamos en OneStream?
Dim dt as New DataTable
Dim strSalesPersonFirstName As String = "John"
Dim strSalesPersonLastName As String = "Doe"
Dim strCity As String = Nothing
using dbconn As DbConnInfo = BRApi.Database.CreateApplicationDbConnInfo(si)
Dim Sql As String = String.Empty
sql = $"SELECT City from XFC_TableView_SalesPerson WHERE SalesPersonFirstName = '{strSalesPersonFirstName}' AND SalesPersonLastName = '{strSalesPersonLastName}';"
dt = BRApi.Database.ExecuteSqlUsingReader(dbConn,sql.ToString,False)
If Not dt is Nothing Then
For Each RowNotInTableException As DataRow In dt.Rows
strCity = RowNotInTableException.Item("City")
Next
End If
brapi.ErroLog.LogMessage(si,"City=" & strCity.ToString)
End Using
La consulta SQL es interpretada por VB.Net, que reemplaza las variables de cadena en la consulta y luego pasa la consulta completa a la base de datos. Ese enfoque puede ser vulnerable si los valores no se controlan adecuadamente.
Syntax
Public Function ExecuteSqlUsingReader(ByVal dbConn As DbConnInfo, ByVal sqlStatement As String, ByVal dbParaminfos As List(Of DbParaminfo),
ByVal useCommandTimeoutLarge As Boolean) As DataTable
dbParamInfo es una lista de objetos DbParamInfo. Básicamente, se carga la lista con los parámetros y sus valores para la consulta SQL parametrizada y luego se pasa a BRApi.Database.ExecuteSql o BRApi.Database.ExecuteSqlUsingReader.
1. Cree un objeto DbParamInfo y agregue sus variables
Dim dt as New DataTable
Dim strSalesPersonFirstName As String = "John"
Dim strSalesPersonLastName As String = "Doe"
Dim strCity As String = Nothing
Dim dbParamInfos As New List(Of DbParamInfo)
dbParamInfos.Add(New DbParamInfo("strSalesPersonFirstName", strSalesPersonFirstName))
dbParamInfos.Add(New DbParamInfo("strSalesPersonLastName", strSalesPersonLastName))
2. Parametrice su consulta SQL
Using dbConn As DbConnInfo = BRApi.Database.CreateApplicationDBConnInfo(si)
Dim Sql As String = String.Empty
sql = $"SELECT City from XFC_TableView_SalesPerson WHERE SalesPersonFirstName = @strSalesPersonFirstName AND SalesPersonLastName = @strSalesPersonLastName;"
3. Pase juntos la consulta SQL y el objeto DbParamInfo
Finalmente, pase tanto la consulta SQL como el objeto DbParamInfo por separado a la llamada de ejecución. Mantener los parámetros separados de la consulta ayuda a evitar SQL Injection y mejora la seguridad del código.
La consulta completa
Dim dt as New DataTable
Dim strSalesPersonFirstName As String = "John"
Dim strSalesPersonLastName As String = "Doe"
Dim strCity As String = Nothing
Dim dbParamInfos As New List(Of DbParamInfo)
dbParamInfos.Add(New DbParamInfo("strSalesPersonFirstName", strSalesPersonFirstName))
dbParamInfos.Add(New DbParamInfo("strSalesPersonLastName", strSalesPersonLastName))
using dbconn As DbConnInfo = BRApi.Database.CreateApplicationDbConnInfo(si)
Dim Sql As String = String.Empty
sql = $"SELECT City from XFC_TableView_SalesPerson WHERE SalesPersonFirstName = @strSalesPersonFirstName AND SalesPersonLastName = @strSalesPersonLastName;"
dt = BRApi.Database.ExecuteSqlUsingReader(dbConn,sql.ToString,dbParamInfors,False)
If Not dt is Nothing Then
For Each RowNotInTableException As DataRow In dt.Rows
strCity = RowNotInTableException.Item("City")
Next
End If
brapi.ErroLog.LogMessage(si,"City=" & strCity.ToString)
End Using
No es un cambio grande en la forma habitual de escribir consultas SQL en OneStream, y ayuda a evitar inyecciones SQL y a superar auditorías de seguridad.
Contacto
MindStream Analytics
Para saber más sobre OneStream y cómo MindStream Analytics puede ayudarle a mejorar su planificación, reporting y analítica, complete el siguiente formulario.
Patrón Seguro contra Inyección SQL en OneStream
Para reducir la inyección SQL en OneStream, defina marcadores en la sentencia y cree una lista correspondiente de objetos DbParamInfo. Cada objeto relaciona el nombre de un parámetro con su valor. Pase tanto la consulta como la lista al método BRApi compatible, en lugar de insertar nombres, filtros o entradas de dashboard dentro de la cadena.
Valide el tipo, la longitud, el formato y el significado empresarial de cada entrada incluso cuando utilice parámetros. La parametrización protege los valores, pero nombres de objetos como tablas o columnas pueden necesitar una lista permitida porque normalmente no se suministran como parámetros ordinarios.
Una revisión completa de inyección SQL en OneStream debe cubrir reglas de dashboard extender, adaptadores de datos, procesos programados, tablas personalizadas, integraciones y cualquier función compartida que construya SQL. Centralizar métodos seguros reduce errores repetidos y facilita la evidencia para auditorías.
Pruebe la regla con valores normales, apóstrofos, campos vacíos, caracteres Unicode inesperados, entradas demasiado largas y cargas conocidas de ataque. Registre los fallos sin exponer credenciales ni datos sensibles. Aplique permisos mínimos en la base de datos para limitar el impacto de cualquier defecto.
Documente el propósito de cada consulta, sus parámetros, el origen de los valores y los permisos necesarios. Incluya revisión por otra persona antes de publicar cambios en producción y vuelva a ejecutar las pruebas de seguridad después de actualizar reglas compartidas o versiones de la plataforma.
La prevención de inyección SQL en OneStream debe formar parte de la revisión de código y de las pruebas antes de cada publicación.
Recursos de Seguridad y Desarrollo de OneStream
Para ampliar la prevención de inyección SQL en OneStream, consulte qué es OneStream, software OneStream, consultoría OneStream, guardar unidades de datos en OneStream, servicios de consultoría OneStream. Revise también la documentación oficial de OneStream sobre consultas parametrizadas.



