Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 你如何实施一个;注销“;使用ASP.NET MVC链接?_Asp.net Mvc_Forms Authentication - Fatal编程技术网

Asp.net mvc 你如何实施一个;注销“;使用ASP.NET MVC链接?

Asp.net mvc 你如何实施一个;注销“;使用ASP.NET MVC链接?,asp.net-mvc,forms-authentication,Asp.net Mvc,Forms Authentication,这似乎是一个相当愚蠢的问题,但我正试图找出最好的方法。您是否可以直接重定向到a/Logout页面,让控制器调用FormsAuthentication.SignOut函数 这是我的第一个想法,但后来我想知道它是否会被第三方网站滥用。假设有人决定发布一个链接到你的/注销页面。用户将从您的应用程序中注销。有什么好方法可以防止这种情况发生吗?你应该寻找一个cookie或一些能将客户识别为真正用户的东西。你应该寻找一个cookie或一些能将客户识别为真正用户的东西。这就是我使用的 public Actio

这似乎是一个相当愚蠢的问题,但我正试图找出最好的方法。您是否可以直接重定向到a/Logout页面,让控制器调用FormsAuthentication.SignOut函数


这是我的第一个想法,但后来我想知道它是否会被第三方网站滥用。假设有人决定发布一个链接到你的/注销页面。用户将从您的应用程序中注销。有什么好方法可以防止这种情况发生吗?

你应该寻找一个cookie或一些能将客户识别为真正用户的东西。

你应该寻找一个cookie或一些能将客户识别为真正用户的东西。

这就是我使用的

public ActionResult Logout()
{
    FormsAuthentication.SignOut();
    return RedirectToAction("Index", "Home");
}
看起来很好用

第三方网站只会自己注销。因此,他们不会实现任何与实际单击注销不同的功能。

这就是我使用的功能

public ActionResult Logout()
{
    FormsAuthentication.SignOut();
    return RedirectToAction("Index", "Home");
}
看起来很好用


第三方网站只会自己注销。因此,他们与实际单击注销没有什么不同。

如果您担心用户通过使用恶意链接意外从您的应用程序中注销,您可以检查推荐人以确保注销来自您的站点(如果用户只是在中键入URL,则为NULL)


实际上,我并不担心这一点,因为注销某人很烦人,但不一定会带来安全风险。

如果您担心某个用户通过使用恶意链接意外注销您的应用程序,您可以检查推荐人,以确保注销来自您的站点(如果用户只是在中键入URL,则为NULL)


事实上,我并不担心这一点,因为注销某人很烦人,但不一定会带来安全风险。

这样的恶意链接就是一类安全漏洞的例子,称为跨站点请求伪造CSRF。注销链接相对无害,但远程站点可以设置许多隐藏表单并发布它们到您的站点,通过POST执行任何可能的操作

最常见的应对措施是在每个表单中包含一个质询,一个随机隐藏的值,然后检查该值。检查referer头可以工作,但请注意,一些浏览器根本不发送referer


阅读更多信息:

此类恶意链接可能是一类称为跨站点请求伪造(CSRF)的安全漏洞的示例。注销链接相对无害,但远程站点可以设置大量隐藏表单,并将其发布到您的站点,以通过post执行任何可能的操作

最常见的应对措施是在每个表单中包含一个质询,一个随机隐藏的值,然后检查该值。检查referer头可以工作,但请注意,一些浏览器根本不发送referer


阅读更多信息:

新的ASP.net MVC测试版包含一个AccountController,这可能值得一看,因为它基本上实现了从注册到登录/注销到忘记密码的所有功能。不确定它有多好,但肯定是一个很好的起点。

新的ASP.net MVC测试版包含一个AccountController,它可以值得一看,因为它基本上实现了从注册到登录/注销到忘记密码的所有功能。不确定它有多好,但肯定是一个很好的起点。

源自ActionResult

public class LogoutResult : ActionResult
{
    private readonly IAuthenticationService _authenticationService;
    private readonly IWebContext _context;

    public LogoutResult(IAuthenticationService authenticationService, IWebContext context)
    {
        _authenticationService = authenticationService;
        _context = context;
    }

    public override void ExecuteResult(ControllerContext context)
    {
        _authenticationService.Logout();
        _context.Abandon();
        _context.Redirect("~/");
    }
}

从ActionResult派生

public class LogoutResult : ActionResult
{
    private readonly IAuthenticationService _authenticationService;
    private readonly IWebContext _context;

    public LogoutResult(IAuthenticationService authenticationService, IWebContext context)
    {
        _authenticationService = authenticationService;
        _context = context;
    }

    public override void ExecuteResult(ControllerContext context)
    {
        _authenticationService.Logout();
        _context.Abandon();
        _context.Redirect("~/");
    }
}

这是一个老问题,但这里有一个MVC的现代示例:

[Authorize]
public RedirectResult Logout()
{
    FormsAuthentication.SignOut();

    return this.Redirect("/");
}

您可以通过对
注销
操作应用
授权
属性来确保只有登录的人才能调用该操作。

这是一个老问题,但这里有一个MVC的现代示例:

[Authorize]
public RedirectResult Logout()
{
    FormsAuthentication.SignOut();

    return this.Redirect("/");
}

您可以确保
注销
操作只能由登录的人通过对其应用
Authorize
属性来调用。

这会有什么帮助?用户在单击链接时仍然会注销。使用任何语言构建的web应用程序在注销时不存在此问题吗nvolves是否要转到某种类型的注销页面?您可以检查推荐人并确保用户来自同一个域,但这并不总是可靠的。这会有什么帮助?用户在单击链接时仍然会注销。对于任何使用任何语言构建的web应用程序,如果注销涉及到g,是否存在此问题转到某种类型的注销页面?你可以检查推荐人并确保用户来自同一个域,但这并不总是可靠的。因此,假设你的应用位于,并且你的注销页面位于。如果第三方网站发布了指向的链接,则任何登录到你的应用并单击该链接的用户都将注销,对吗?你能检查一下它是否是MVC中的回发吗?如果是,那么就注销,否则就重定向到索引视图?@kevin,只有第三方应用程序才会注销。当前使用你的应用程序的用户在自己单击之前都不会被注销。@标记你只能允许对控制器的GET请求。如果你的站点的其余部分正在使用较旧的aspx功能,而您正试图在其上实现MVC登录/注销界面?目前,我的登录页面MVC项目没有索引或主视图。该网站的主页是另一个非MVC项目中的aspx页面,因此,当用户注销时,我希望重定向到登录视图,并在其上显示返回URL,以便将他们带到当他们重新登录时,home.aspx将显示另一个项目。现在我正在尝试FormsAuth.SignOut,然后返回RedirectToAction(“登录”,“帐户”);但是,如果用户尝试再次登录,它只会将他们保留在登录视图OK,要回答我的查询,您只需在注销后重定向到您的主aspx页面,这样它就可以强制完成登录视图并正确返回