更新:2007 年 11 月

安全是每个 C# 应用程序的一个不可缺少的方面,并且在每个开发阶段都必须加以考虑,而不仅仅是在完成设计和实现后才加以考虑。

特定于 C# 的安全建议

本列表并未列出所有潜在的安全问题。它只是重点强调了 C# 开发人员遇到的一些常见问题。

  • 使用 checked 关键字控制整型算术运算和转换的溢出检查上下文。

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

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

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

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

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

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

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

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

  • 为程序集指定强名称。

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

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

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

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

其他安全资源

请参见

概念

安全性工具

其他资源

本机代码和 .NET Framework 代码的安全性
代码安全维护指南