ASP.NET中直接页面访问的安全检查

时间:2013-11-05 08:01:01

标签: asp.net-mvc-3 security authentication

我有一个多用户网络应用程序。如果管理员登录,则启用所有菜单。如果用户登录,则仅允许有限的功能。

当任务需要用户注意(例如分配给新项目)时,管理员会向用户发送带有正确页面URL的邮件。然后,用户可以导航到该页面(没有任何凭据)并采取必要的操作。

现在的问题是 - 当管理员登录系统时,会向用户触发邮件,如果他没有注销。用户点击(在电子邮件中)在另一个标签(IE / Chrome)中打开页面的链接(或在同一页面上),用户可以看到管理员可用的所有选项。

虽然这不是以生产为中心的问题,但我在客户端演示中将此安全漏洞升级。

此外,管理员和用户可通过适当的菜单项访问用户尝试访问的页面。这限制了我在页面加载时设置了一些条件。

现在,我怎样才能限制用户只看到允许的选项,无论谁已经登录?

2 个答案:

答案 0 :(得分:0)

如果登录应用程序的最后一个用户是管理员而没有正确注销,则可以设置会话超时以自动在web.config中注销用户:

<sessionState mode="StateServer" timeout="20" cookieless="false"/>

有关详细信息:sessionState MSDN

答案 1 :(得分:0)

Cookie或HTTP身份验证将由同一浏览器的所有标签共享,因此如果您在登录后单击链接,您将保持登录状态。

可能的解决方案:

  1. 点击该应用程序中的注销,然后点击电子邮件中的链接。
  2. 将链接复制并粘贴到另一个浏览器中,而不是生成链接(例如Chrome而不是Firefox)。
  3. 打开一个私人标签(例如Chrome中的隐身模式)并粘贴该链接。
  4. 将默认浏览器设置为与启动演示的浏览器不同的浏览器,以便在单击电子邮件链接时在其他位置打开。
  5. 以单独的格式生成URL,该格式包含一个参数,用于通知应用程序使任何会话过期并要求重新授权。例如 如果您的链接是“www.example.com/task/1232”,则电子邮件中的链接为“www.example.com/task/1232/reauth”,这将使应用程序在允许访问之前询问用户名和密码。您可以对此进行展开,并使用“www.example.com/task/1232/user/4545”形式的网址,如果用户尚未以用户ID 4545登录,应用只会要求重新授权。