This documentation is archived and is not being maintained.

Code Access Security

Today's highly connected computer systems are frequently exposed to code originating from various, possibly unknown sources. Code can be attached to e-mail, contained in documents, or downloaded over the Internet. Unfortunately, many computer users have experienced firsthand the effects of malicious mobile code, including viruses and worms, which can damage or destroy data and cost time and money.

Most common security mechanisms give rights to users based on their logon credentials (usually a password) and restrict resources (often directories and files) that the user is allowed to access. However, this approach fails to address several issues: users obtain code from many sources, some of which might be unreliable; code can contain bugs or vulnerabilities that enable it to be exploited by malicious code; and code sometimes does things that the user does not know it will do. As a result, computer systems can be damaged and private data can be leaked when cautious and trustworthy users run malicious or error-filled software. Most operating system security mechanisms require that every piece of code must be completely trusted in order to run, except perhaps for scripts on a Web page. Therefore, there is still a need for a widely applicable security mechanism that allows code originating from one computer system to execute with protection on another system, even when there is no trust relationship between the systems.

To help protect computer systems from malicious mobile code, to allow code from unknown origins to run with protection, and to help prevent trusted code from intentionally or accidentally compromising security, the .NET Framework provides a security mechanism called code access security. Code access security allows code to be trusted to varying degrees depending on where the code originates and on other aspects of the code's identity. Code access security also enforces the varying levels of trust on code, which minimizes the amount of code that must be fully trusted in order to run. Using code access security can reduce the likelihood that your code can be misused by malicious or error-filled code. It can reduce your liability because you can specify the set of operations your code should be allowed to perform as well as the operations your code should never be allowed to perform. Code access security can also help minimize the damage that can result from security vulnerabilities in your code.

All managed code that targets the common language runtime receives the benefits of code access security, even if that code does not make a single code access security call. However, all applications should make code access requests, as outlined in Code Access Security Basics.

In This Section

Introduction to Code Access Security
Provides an overview of code access security.
Code Access Security Basics
Describes code access security and its most common uses.
Using Libraries from Partially Trusted Code
Describes how to enable libraries for use with unmanaged code and how to use libraries from unmanaged code.
Writing Secure Class Libraries
Describes security considerations for class libraries.
Writing Secure Managed Controls
Describes security considerations for developing and deploying managed controls.
Creating Your Own Code Access Permissions
Describes how to how create custom permissions.

Related Sections

Securing Applications
Provides an overview of the entire .NET Framework security system.
Key Security Concepts
Provides an overview of many of the key terms and concepts used in the .NET Framework security system.
Role-Based Security
Describes how to incorporate security based on roles.
Cryptographic Services
Describes how to incorporate cryptography into your applications.
Security Policy Management
Describes how to manage security policy.
Security Tools
Describes the tools used to implement and administer the .NET Framework security system.