【问题标题】:Prevent cancelling Password change process in MVC 3 Web Application防止在 MVC 3 Web 应用程序中取消密码更改过程
【发布时间】:2013-02-10 11:28:14
【问题描述】:

这是我的问题。我的应用程序有登录页面、密码重置页面和个人资料页面。密码重置页面和个人资料页面未经身份验证无法访问。

我已将[Authorize] 用于配置文件操作和密码重置操作。

在我的应用程序中,我的用户密码在 30 天后过期。因此,当用户登录并且密码过期时,我会重定向用户以更改密码页面。由于用户已经通过身份验证,用户可以进入个人资料页面,输入网址(例如:www.mywebsite.com/Profile/View)。这是一个漏洞。

我不希望用户取消密码更改过程。我想强制用户更改密码。

我怎样才能做到这一点?

【问题讨论】:

    标签: c# asp.net-mvc-3 visual-studio-2010 authentication security


    【解决方案1】:

    在您的用户/密码表中有另一个布尔标志列,以指示用户是否在密码过期后重置了密码。因此,每次密码过期时,将该记录的该列值设置为false,当用户真正按照您的流程更改密码时,将该值设置为true。现在,当用户尝试访问 View 操作方法(或任何其他操作方法/控制器)时,您可以检查此列值。您可以将此检查编写为自定义操作过滤器,并根据需要将其应用于操作方法/控制器。

    您也可以使用PasswordLastUpdated 日期时间列代替上面提到的布尔标志。在这种情况下,您需要检查该值(PasswordLastUpdated)是在过期过程记录的日期时间之前还是之后。(DateExpired 列值)

    here 提供了创建自定义操作过滤器的示例。

    【讨论】:

    • 是的,我已经有了这两列。我可以在每个视图中检查这种情况。但我认为这不是一个好习惯。如何编写自定义动作属性?
    • @yohan.jayarathna :不要在你的视图中写这种代码。正如我所提到的,您必须编写一个动作属性并将其应用于您的动作方法/控制器(以便所有动作方法都会进行检查)
    猜你喜欢
    • 2020-05-22
    • 2012-02-13
    • 2015-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多