C# 从表单本身外部激活注销表单是否安全?

C# 从表单本身外部激活注销表单是否安全?,c#,asp.net-mvc,C#,Asp.net Mvc,关于StackOverflow的第一个问题,如果这是重复的,请原谅我(我先搜索了,我保证) 我正在使用ASP.NETMVC4构建一个简单的后台应用程序。用于注销的默认代码使用表单来使用验证功能,如下所示: @using (Html.BeginForm("LogOut", "Account", FormMethod.Post, new { id = "logoutForm" })) { @Html.AntiForgeryToken() <a href="javascript:

关于StackOverflow的第一个问题,如果这是重复的,请原谅我(我先搜索了,我保证)

我正在使用ASP.NETMVC4构建一个简单的后台应用程序。用于注销的默认代码使用表单来使用验证功能,如下所示:

@using (Html.BeginForm("LogOut", "Account", FormMethod.Post, new { id = "logoutForm" }))
{
    @Html.AntiForgeryToken()
    <a href="javascript:document.getElementById('logoutForm').submit()">Log off</a>
}
<a href="javascript:document.getElementById('logoutForm').submit()">Log Out</a>
@using (Html.BeginForm("LogOut", "Account", FormMethod.Post, new { id = "logoutForm" }))
{
    @Html.AntiForgeryToken()
}
@使用(Html.BeginForm(“注销”,“帐户”,FormMethod.Post,new{id=“logoutForm”}))
{
@Html.AntiForgeryToken()
}
然而,这给我的导航栏留下了一些奇怪的样式问题。我突然想到,只要将链接移到表单之外,我就可以轻松解决这个问题,如下所示:

@using (Html.BeginForm("LogOut", "Account", FormMethod.Post, new { id = "logoutForm" }))
{
    @Html.AntiForgeryToken()
    <a href="javascript:document.getElementById('logoutForm').submit()">Log off</a>
}
<a href="javascript:document.getElementById('logoutForm').submit()">Log Out</a>
@using (Html.BeginForm("LogOut", "Account", FormMethod.Post, new { id = "logoutForm" }))
{
    @Html.AntiForgeryToken()
}

@使用(Html.BeginForm(“注销”,“帐户”,FormMethod.Post,new{id=“logoutForm”}))
{
@Html.AntiForgeryToken()
}
然而,这让我感到疑惑:这仍然安全吗?


(我想是的,但我是ASP.NET的新手,所以我想得到确认。)

如果
注销
方法只接受POST请求,并且您验证反伪造令牌,那就太好了

[ValidateAntiForgeryToken]
[HttpPost]
public ActionResult LogOut()
{
    //log out user
}

首先,我假设页面按照您的要求提交

表单安全更多的是关于如何提交数据的上下文。如果它需要安全,那么您可能需要考虑内部系统加密或SSL证书中的一些。p> 我会尝试解决“我的导航栏的奇怪样式问题”,而不是像那样随意使用HTML元素

如果需要帮助,请发布HTML


顺便说一句,我认为防伪令牌可以与您发布的内容配合使用。

为什么您认为这是不安全的?我的印象是,防伪令牌需要位于敏感代码(即链接本身)之前,但这没有意义,因为链接所做的只是发布表单。投递/路由是需要保护的部分,因此只要AntiForgeryToken在那里,就可以了。然而,这是我第一次尝试构建一个更严肃(阅读:不完全是客户端)的web应用程序,我不想通过“聪明”来彻底破坏它的安全性。我同意你的看法,但我第一次使用Twitter引导(带基本导航栏)。我没有太多的时间来学习/学习修改它的代码(非常紧迫的期限),所以我现在尝试使用它。好的,基本上javascript正在提交表单,所以我不认为表单本身是不安全的。我正在为此使用SSL,但据我所知,这并不能防止AntiForgeryToken所保护的跨站点脚本问题。