还有哪些其他ASP.NET安全最佳实践?
到目前为止已在此处列出:
[将应用程序移至生产环境时,始终会生成新的加密密钥和管理员密码。
切勿直接或以加密形式存储密码。始终以一种方式存储散列密码。
总是将连接字符串存储在Web.config的标记中,并使用受保护的配置提供程序(RSA或DPAPI)在配置部分中对其进行加密。参见example here
使用具有最小特权的用户ID连接到SQL Server或您正在使用的数据库。例如,如果您仅从某个应用程序模块执行存储过程,则必须创建一个仅具有执行权限的用户ID。
[如果要在页面上使用基于角色的安全性,请使用PrincipalPermission。
[PrincipalPermission(SecurityAction.Demand,Role =“ Admin”)]公共类AdminOnlyPage:BasePageClass{// ...}
总是使用参数来防止SQL查询中的SQL Injection。
始终在网络配置中保留customErrors,使您将错误/异常设为私有
在Web应用程序中,请始终验证用户输入的html标记或任何脚本。
从不存储敏感信息,例如cookie中的密码。
我发现Microsoft的Developer Highway Code是有用的安全检查表。
微软对此主题有很多话要说:
[检查新的安全运行时引擎(测试版于11月14日发布:]:
http://blogs.msdn.com/cisg/archive/2008/10/24/a-sneak-peak-at-the-security-runtime-engine.aspx
http://blogs.msdn.com/cisg/archive/2008/11/13/an-update-on-some-upcoming-free-tools.aspx
这应该替换当前的Anti-XSS库。
安东尼:-)www.codersbarn.com
虽然在页面上显示数据库中的内容时,您可以使用HttpServerUtility.HtmlEncode对输出进行编码,以避免跨站点脚本(XSS)攻击。
考虑在IIS服务器上安装URLScan,以防止SQL注入。另外,为了防止XSS攻击,我将使用MSFT的AntiXSS库,而不是使用内置的编码输出,而不是使用HttpServerUtility中的内置HtmlEncode。
您可能对本文Security Best Practices: ASP.NET Applications感兴趣。HTH