Partekatu bidez


Seguridad (LINQ to DataSet)

En este tema se describen los problemas de seguridad en LINQ to DataSet.

Pasar una consulta a un componente que no es de confianza

Una consulta LINQ to DataSet se puede formular en un punto de un programa y ejecutarse en otro. En el punto en el que se formula la consulta, la consulta puede hacer referencia a cualquier elemento que esté visible en ese momento, como miembros privados de la clase a la que pertenece el método de llamada, o símbolos que representen variables o argumentos locales. En tiempo de ejecución, la consulta podrá acceder eficazmente a los miembros a los que hace referencia la consulta en la formulación, aunque el código de llamada no tenga visibilidad sobre ellos. El código que ejecuta la consulta no tiene visibilidad agregada arbitraria, en que no puede elegir a qué acceder. Sólo podrá obtener acceso a lo que la consulta obtenga acceso y sólo a través de la misma consulta.

Esto implica que al pasar una referencia a una consulta a otro fragmento de código, se está confiando al componente que recibe la consulta el acceso a todos los miembros públicos y privados a los que hace referencia la consulta. En general, las consultas LINQ to DataSet no deben pasarse a componentes que no son de confianza, a menos que la consulta se haya construido cuidadosamente para que no exponga información que se debe mantener privada.

Entrada externa

Las aplicaciones suelen realizar entradas externas (de un usuario u otro agente externo) y realizar acciones basadas en esa entrada. En el caso de LINQ to DataSet, la aplicación podría construir una consulta de cierta manera, en función de la entrada externa o usar entradas externas en la consulta. Las consultas de LINQ a DataSet aceptan parámetros en todos los lugares donde se aceptan literales. Los desarrolladores de aplicaciones deben usar consultas con parámetros, en lugar de insertar literales de un agente externo directamente en la consulta.

Cualquier entrada derivada directa o indirectamente del usuario o de un agente externo puede tener contenido que aproveche la sintaxis del idioma de destino para realizar acciones no autorizadas. Esto se conoce como un ataque por inyección de código SQL, denominado después de un patrón de ataque en el que el lenguaje de destino es Transact-SQL. La entrada del usuario insertada directamente en la consulta se usa para quitar una tabla de base de datos, provocar una denegación de servicio o cambiar la naturaleza de la operación que se está realizando. Aunque la composición de consultas es posible en LINQ to DataSet, se realiza a través de la API del modelo de objetos. Las consultas LINQ to DataSet no se componen mediante la manipulación o concatenación de cadenas, ya que están en Transact-SQL y no son susceptibles a ataques por inyección de código SQL en el sentido tradicional.

Consulte también