保护ASP.Net MVC站点

时间:2009-03-17 02:17:49

标签: asp.net-mvc security

作为网络和MVC的相对新手,我正在寻找我应该实施的安全最佳实践的一个很好的总结。

该网站将公开面对“中度敏感数据”(意味着我们不能被起诉,但如果数据输出可能不会结交很多朋友!)并将采取以下安全措施:   a:表单/成员身份验证和授权   b:参数化查询以防止sql注入。   c:自动超时,x min不活动   c:客户端到服务器加密的SSL

你还推荐什么?

*保护IIS和网络不属于我的域名,所以我对我需要对软件做的事情更感兴趣。

7 个答案:

答案 0 :(得分:4)

  • 如果您使用Cookie识别用户,请务必使用任意令牌(例如GUID)存储在客户端上以进行识别。我见过太多网站将我的电子邮件地址或用户名存储在我的cookie中......只需将其更改为另一个!

  • 编写您的软件,使其可以在medium trust下运行。

答案 1 :(得分:3)

如果您不熟悉Web开发,则应了解cross site scripting (XSS)。您可以使用Http.Encode帮助程序方法在ASP.NET MVC中防止这种情况。

答案 2 :(得分:2)

确保您防止无序请求。在允许查看敏感数据之前,确保客户端已通过身份验证,或者在某些情况下,在允许数据操作之前确保客户端已通过正确的通道。例如,如果请求来自产品详细信息页面,则仅允许将项目添加到购物车。如果你不检查,任何人都可以搞乱这个动作。该网址就像http://server/cart/add/XYZ123,任何人都可以调整'id'参数。

答案 3 :(得分:1)

答案 4 :(得分:1)

看看Phil Haack的这个post - 参与开发的MS开发者之一。

另外,请查看Microsoft Anti-Cross Site Scripting Library以过滤掉所有传入参数

答案 5 :(得分:1)

  1. 也许您应该选择可以从外部调用的方法。例如,要小心删除任何像http://yourhost.com/edit/deletealltable这样的表格。 确保你很好地设计你的课程和方法。并提供属性[NonAction]以防止公共方法被调用。

  2. 确保您根据需要以最少的花式设计显示数据(特别是敏感数据),并根据需要使用客户端脚本。

  3. 删除解决方案文件夹中未使用的文件等未使用的垃圾文件。

  4. 检查并仔细检查并验证任何输入控件,如文本框。我只是可以在文本框中提供一些东西来破解你的系统。
  5. 如果您在MVC和常规ASP.NET之间使用mix,请删除它们之间的任何依赖关系。

答案 6 :(得分:0)

请确保完全覆盖基础知识,独立于ASP.NET。确保您的DBMS具有一个单独的用户,该用户具有从Web应用程序访问数据库所设置的最低要求权限(例如,CRUD和执行指定数据库的sprocs)。参数化查询是一个很好的想法,但总是可以清除你的输入:它不是对SQL注入的完全防御。

保持设计清洁,易于理解。记录你做的任何事情,特别是在数据库方面。如果你的所有好工作在几个月或几年后被两个程序员摧毁了,那将是非常坏 - 一个没有意识到,比如说,Web应用程序的数据库用户(现在正在访问数据库)在另一台服务器上)不应该具有root权限,而另一个添加了一个没有正确清理输入的控件。关于这类事情只能做很多事情,但设计傻瓜维持你的代码的可能性并不是因为程序员会觉得你很好 - 这样傻子就不会把你带出来的业务。