Instrucciones de codificación segura

La seguridad basada en la evidencia y la seguridad de acceso del código ofrecen mecanismos explícitos y muy eficaces para implementar el sistema de seguridad. Con la mayor parte del código de la aplicación se puede usar simplemente la infraestructura implementada por .NET Framework. En algunos casos, es necesario utilizar una seguridad específica de la aplicación, que se compila mediante la extensión del sistema de seguridad o con nuevos métodos ad hoc.

Con los permisos que exige .NET Framework y otros requisitos en el código, se deben construir las barreras que impidan que un código malintencionado obtenga información confidencial o realice otras acciones no deseadas. Además, mediante el código de confianza se debe conseguir un equilibro entre la seguridad y la capacidad de uso en todos los escenarios esperados.

En esta información general, se describen las diversas formas de diseñar código para que funcione con el sistema de seguridad.

NotaNota

En .NET Framework versión 4, se han realizado cambios importantes en el modelo de seguridad y la terminología de .NET Framework. Para obtener más información sobre estos cambios, vea Cambios de seguridad en .NET Framework 4.

Código neutral respecto a la seguridad

El código neutral con respecto a la seguridad no realiza ninguna acción concreta con el sistema de seguridad. Se ejecuta con cualquier permiso que reciba. Aunque las aplicaciones que no consiguen detectar las excepciones de seguridad asociadas con operaciones protegidas (como la utilización de archivos, trabajo en red, etc.) pueden producir una excepción no controlada, el código neutral respecto a la seguridad puede aprovechar las ventajas de las tecnologías de seguridad de .NET Framework.

Una biblioteca neutral respecto a la seguridad posee unas características especiales que es importante comprender. Suponga que la biblioteca proporciona los elementos de la API que utilizan archivos o que llaman a código no administrado; si su código no tiene el correspondiente permiso, entonces no se ejecutará de la forma descrita. Sin embargo, aunque el código tenga el permiso, todo código de la aplicación que llame a ese código deberá tener el mismo permiso para funcionar correctamente. Si el código que realiza la llamada no tiene el permiso necesario, aparece una excepción SecurityException como resultado del recorrido de pila de seguridad de acceso del código.

Código de aplicación que no es un componente reutilizable

Si el código forma parte de una aplicación a la que no llamará otro código, la seguridad es una cuestión sencilla y puede que no sea necesario programar un código especial. No obstante, tenga en cuenta que un código malintencionado puede llamar a su código. Aunque la seguridad de acceso a código puede evitar el acceso de código malintencionado a los recursos, este tipo de código podría leer los valores de campos o propiedades que contengan información confidencial.

Además, si el código admite los datos proporcionados por el usuario desde Internet o de otras fuentes que no sean de confianza, es necesario tener mucho cuidado con las entradas malintencionadas.

Implementación de contenedor administrado en código nativo

Normalmente, en este escenario se implementa alguna funcionalidad muy útil en código nativo con el fin de que esté disponible para código administrado. Con la invocación de plataforma o la interoperabilidad COM es fácil escribir contenedores administrados. No obstante, si los escribe de esta forma, los llamadores de los contenedores deben tener derechos de código no administrado para funcionar correctamente. Con una directiva predeterminada, esto significa que el código descargado de una intranet o de Internet no funcionará con los contenedores.

En vez de conceder derechos de código no administrado a todas las aplicaciones que usen estos contenedores, es mejor concederlos únicamente al código de contenedor. Si la funcionalidad subyacente no expone recursos y la implementación es asimismo segura, solo es necesario declarar los derechos del contenedor, lo que permite a cualquier código llamar a través del contenedor. Cuando se exponen recursos, la codificación de seguridad debe ser la misma que la del código de biblioteca descrito en la siguiente sección. Como el contenedor puede exponer llamadores a esos recursos, es necesario realizar una cuidadosa comprobación de la seguridad de código nativo, que es responsabilidad del contenedor.

Código de biblioteca que expone recursos protegidos

Esta forma de enfocar la codificación de seguridad es la más eficaz y, probablemente, la más peligrosa si se realiza incorrectamente. La biblioteca se utiliza como una interfaz para que otro código tenga acceso a determinados recursos que, de otro modo, no estarían disponibles, al igual que la clases de .NET Framework exigen permisos en los recursos que utilizan. En cualquier parte que exponga un recurso, el código debe exigir, en primer lugar, el permiso apropiado al recurso (es decir, tiene que realizar una comprobación de seguridad) y, a continuación, declarar sus derechos para ejecutar la operación en curso.

Temas relacionados

Título

Descripción

Cómo: Ejecutar código de confianza parcial en un recinto

Explica cómo se ejecuta una aplicación que no es de plena confianza en un entorno de seguridad restringido, en el que se limitan los permisos de acceso a código que se le conceden.

Solicitudes de permiso

Describe cómo interactuar con el sistema de seguridad de .NET Framework mediante las solicitudes de permiso.

Proteger los datos de estado

Describe cómo proteger los miembros privados.

Proteger acceso a métodos

Describe cómo ayudar a proteger los métodos contra las llamadas de código de confianza parcial.

Proteger código de contenedor

Describe aspectos de la seguridad relacionados con códigos que contienen otros código.

Seguridad y campos de matriz públicos de sólo lectura

Describe aspectos de la seguridad relacionados con código que usa las matrices públicas de solo lectura existentes en las bibliotecas de .NET Framework.

Proteger control de excepciones

Describe aspectos de la seguridad relacionados con el control de excepciones.

Seguridad e introducción de datos por el usuario

Describe aspectos de la seguridad relacionados con las aplicaciones que admiten los datos proporcionados por el usuario.

Consideraciones de seguridad y de interacción remota

Describe aspectos de la seguridad relacionados con las aplicaciones que se comunican a través de los dominios de aplicación.

Seguridad y serialización

Describe aspectos de seguridad relacionados con la serialización de objetos.

Seguridad y condiciones de carrera

Describe cómo evitar condiciones de carrera en el código.

Seguridad y generación de código inmediata

Describe aspectos de la seguridad relacionados con las aplicaciones que generan código dinámico.

Permisos peligrosos y administración de directivas

Describe los permisos que pueden permitir burlar la seguridad.

Cuestiones de seguridad e instalación

Describe los factores que hay que tener en cuenta a la hora de probar e instalar la aplicación.

Seguridad ASP.NET de aplicaciones Web

Describe detalladamente la seguridad ASP.NET y proporciona instrucciones para su utilización en el código.

Seguridad de acceso del código

Describe detalladamente la seguridad de acceso a código de .NET Framework y proporciona instrucciones para su utilización en el código.

Seguridad basada en roles

Describe detalladamente la seguridad basada en funciones de .NET Framework y proporciona instrucciones para su utilización en el código.