其他ASP.NET安全最佳实践还有什么?
到目前为止,已经列出了这里:
>当您将应用程序移动到生产中时,始终生成新的加密密钥和管理员密码。
>不要直接或加密形式存储密码。始终存储一种方式散列密码。
>始终将连接字符串存储在Web.config的标签中,并通过使用受保护的配置提供程序(RSA或DPAPI)对配置部分进行加密。见example here
>使用具有最小权限的用户标识连接到sql服务器或正在使用的数据库。例如,如果您仅从某个应用程序模块执行存储过程,则必须创建一个只具有执行权限的用户标识。
>如果要在页面上使用角色基础安全性,请使用PrincipalPermission。
[PrincipalPermission(SecurityAction.Demand,Role="Admin")] public class AdminOnlyPage : BasePageClass { // ... }
>始终使用参数来阻止SQL查询中的SQL Injection。
>考虑在IIS服务器上安装URLScan以防止sql注入。
另外,为防止XSS攻击。您可以使用MSFT的AntiXSS库,而不是内置的编码输出,而不是HttpServerUtility中内置的HtmlEncode。
>始终保持web配置中的customErrors,使您的错误/异常私有
< customErrors mode =“On”defaultRedirect =“MyErrorPage.htm”/>
>在Web应用程序中,始终验证用户对html标签或任何脚本的输入。
>不要将敏感信息存储在Cookie中,例如密码。
>如果异常,请不要显示系统错误信息,堆栈跟踪等。
解决方法
我发现微软的
Developer Highway Code是一个有用的安全检查表。