安全性和编程(C# 和 Visual Basic)

开发人员在开始使用 .NET Framework 时需要解决一些关键的安全问题。本概述讨论 Windows 和 Web 应用程序及开发的实现、调试和部署阶段。

概述

Visual Studio 可以让您控制正在运行的应用程序的安全。虽然在使用 .NET Framework 时可以进行控制,但该控制要求您在编程时就必须考虑安全问题。有些安全问题必须先解决,才能为用户创建一个友好且可用的应用程序。

在以下三种常见情况下,需要解决安全问题:

  • 权限:运行您的应用程序的用户可能会拒绝为您的应用程序提供特权。由于您是从用户已指定不允许对某些系统资源访问的位置运行应用程序,所以会发生这样的情况。例如,用户可以将公共语言运行时配置为拒绝网络驱动器上存储的任何应用程序的文件特权。在编写代码时需要注意这一点,编写的代码应对权限拒绝做出合理响应。有关更多信息,请参见 .NET Framework 安全策略

  • Web 应用程序:必须防止从您的 Web 服务器访问您的 Web 应用程序的用户运行恶意代码或破坏服务器上的数据。有关更多信息,请参见ASP.NET 安全性

  • Visual Studio 的设置:您设置 Visual Studio 的方式会不同程度地让您的服务器处于遭受恶意代码攻击的危险中。有关更多信息,请参见User Rights and Visual Studio

保护资源是一个涉及多种技术及跨越整个开发周期的过程。通过精心设计、实现、测试和部署应用程序,您可以创建安全性极高的应用程序。由 ASP.NET、操作系统和 Web 浏览器提供的安全技术均可用于保护您的应用程序。

特定的安全建议

本列表并未列出所有潜在的安全问题。它描述 Visual Basic 和 C# 开发人员需要了解的一些常见问题。

  • 确保启用了整数溢出检查。在 C# 中,可通过使用 checked 关键字或“高级生成设置”对话框 (C#) 来启用此选项。在 Visual Basic 中,可以使用“高级编译器设置”对话框 (Visual Basic)

  • 始终对参数使用最严格的数据类型。例如,在将值传递给一个描述数据结构大小的方法时,应使用无符号整数而不是整数。

  • 不要基于文件名做出判断。文件名的表示方法可以有很多种,因此攻击者可能避开您对特定文件设置的测试。

  • 千万不要将密码或其他敏感信息硬编码到应用程序中。

  • 始终验证用于生成 SQL 查询的输入。

  • 验证传入方法的所有输入。System.Text.RegularExpressions 命名空间中的正则表达式方法可用于确认输入是否具有正确的格式(如电子邮件地址)。

  • 不要显示异常信息:它会给任何潜在的攻击者提供有价值的线索。

  • 确保应用程序在最低可能权限下运行时能够正常工作。很少有应用程序要求用户以管理员的身份登录。

  • 不要使用自己的加密算法。应该使用 System.Security.Cryptography 类。

  • 为程序集指定强名称。

  • 不要在 XML 或其他配置文件中存储敏感信息。

  • 仔细检查包装本机代码的托管代码。确认本机代码是安全的。

  • 在使用从应用程序外部传递的委托时应十分谨慎。

  • 对程序集运行 Visual Studio 代码分析工具,以确保符合 Microsoft .NET Framework 设计准则。此工具还可以找到 200 个以上的代码缺陷并提出警告。有关更多信息,请参见托管代码的代码分析概述

其他安全资源

下列 Microsoft 网站提供了有关创建安全且可靠的软件的详细信息。

相关主题

标题

说明

.NET Framework 安全性基础知识

提供 .NET Framework 安全性的概述,并描述适用于部分信任环境的编码技术。

用于创建安全应用程序的编码辅助资源

描述可帮助保护开发服务器的安全的 Visual Studio 工具。

代码访问权限和安全性

描述一些对象,这些对象用于保护资源和操作,以免被未经授权的用户使用。

请参见

任务

Visual Basic 安全示例

概念

Visual Studio 中的安全性

代码安全维护指南

其他资源

Windows 窗体安全

ASP.NET 安全性