0

我希望保护 ASP.NET MVC 应用程序中的单个(动态)页面。

我不想使用完整的身份验证系统——我们已经在为站点管理员使用表单身份验证。相反,这是为了让我们可以向特定用户发送带有密码的页面的链接。

我目前处理此问题的方式是,当提交有效密码时,我们会创建一个包含页面 id (Guid) 及其会话 id 的加密 cookie,并将它们重定向到页面。然后在我们的“页面”控制器操作中验证这个 cookie。

所以第一个问题,这是最好的(最安全的)方法(除了使用表单身份验证)吗?

第二个问题,我可以读取 Forms Authentication 使用的机器密钥来执行加密,还是更好地使用 FormsAuthentication 来加密 cookie(我能看到的唯一重载是需要 FormsAuthenticationTicket 的重载)?

因为我们总是在部署之前生成一个新的机器密钥,所以如果我们所有的加密都使用相同的密钥会更好。

[更新]

关于如何访问机器密钥,我在http://rich-rogers.com/archive/asp.net-c-sharp-encrypt-hash-using-machinekey-values找到了答案

[更新 2]

在问了这个问题后,我意识到,由于我需要维护他们可以访问的页面列表,所以我最好将这些页面存储在当前会话中。我可以存储具有到期日期的安全令牌列表。因为我已经有一个会话包装器,所以这也应该很容易进行单元测试。

4

1 回答 1

1

要真正保护您的 cookie 密钥,您需要使其仅在 SSL 页面上可用,否则有人可以获得它,即使它已加密,他也可以使用它。

    Request.Cookies[cookieName].HttpOnly = true;
    Request.Cookies[cookieName].Secure = true;

另请阅读:一些黑客可以从用户那里窃取 cookie 并在网站上使用该名称登录吗?

于 2011-04-06T12:21:11.527 回答