使用子域保护mvc应用程序

时间:2012-06-18 04:13:37

标签: c# asp.net asp.net-mvc asp.net-mvc-3

我有一个mvc应用程序,我允许企业使用登录 https://storea.mydomain.com https://storeb.mydomain.com等等

每个企业都创建了用户,并且我有一个将业务ID与EmployeeId匹配的表。我试图锁定应用程序,以便businessA的经过身份验证的用户无法从BusinessB访问信息。

我可以在哪里检查用户访问子域名的最佳位置?我是否覆盖OnActionExecuted操作,检查子域是什么,然后查看会话值以查看它们是否匹配,如果不同则将其记录下来。

或者这有更优雅的方式来做到这一点?

关于最佳实践的建议和建议会很棒!谢谢

3 个答案:

答案 0 :(得分:1)

自定义Authorize属性似乎是执行此操作的好地方。您可以覆盖可以访问HttpContext的AuthorizeCore方法,并且您将能够基于子域执行自定义授权逻辑。

答案 1 :(得分:0)

据我了解,您的MVC应用程序使用单个数据库来存储您拥有的所有业务的信息。这就是为什么你会担心Bussines A访问Bussines B的信息。

因此,对我来说,您的数据库可以检查哪些信息可以访问每个用户,具体取决于他们所属的业务。

我认为您甚至不需要使用子域名。

答案 2 :(得分:0)

在这些情况下,我使用存储库模式,在每个查询/数据访问中,您确保传入包含业务ID的where子句。 例如:


select * from orders where orderid=@orderId and companyID=@companyId

在查询中执行此操作非常重要,因为您希望使用数据规则来防止不正确的查询。例如,在Authorize属性上执行此操作并不能保证某人没有篡改数据以加载其他公司的信息。

此外,我还有http://mvcsecurity.codeplex.com/个扩展程序,以帮助保护存储在页面上的ID,以帮助防止篡改。