Asp.net 使用来自WebForm的MVC2 AntiforgeryToken 背景
我需要从WebForms页面(托管在cms中)使用AntiForgeryToken。页面应将数据发布到解决方案中的MVC2.0操作。该操作应使用ValidateAntiForgeryToken属性 我确实从这里尝试了解决方案:但它似乎不起作用,因为控制器操作将呈现的antiforgerytoken标记为无效 当前解决方案 现在我已经解决了这个问题,这样我就有了一个操作,可以呈现只包含带有antiforgerytoken的输入标记的部分视图 查看Asp.net 使用来自WebForm的MVC2 AntiforgeryToken 背景,asp.net,ajax,asp.net-mvc-2,antiforgerytoken,Asp.net,Ajax,Asp.net Mvc 2,Antiforgerytoken,我需要从WebForms页面(托管在cms中)使用AntiForgeryToken。页面应将数据发布到解决方案中的MVC2.0操作。该操作应使用ValidateAntiForgeryToken属性 我确实从这里尝试了解决方案:但它似乎不起作用,因为控制器操作将呈现的antiforgerytoken标记为无效 当前解决方案 现在我已经解决了这个问题,这样我就有了一个操作,可以呈现只包含带有antiforgerytoken的输入标记的部分视图 查看 <%@ Control Language="
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<%= Html.AntiForgeryToken() %>
页面使用javascript将antiforgerytoken拉入表单,如下所示:
表格
<form id="jsonForm" action="/my/action" method="post">
<input id="tokenPlaceholder" type="hidden" />
获取防伪令牌
<script type="text/javascript">
$(function () {
$.ajax({
url: "/antiforgery/token",
type: "GET",
success: function (data, textStatus, jqXHR) {
$("#tokenPlaceholder").replaceWith(data);
}
});
});
</script>
$(函数(){
$.ajax({
url:“/antiforgery/token”,
键入:“获取”,
成功:函数(数据、文本状态、jqXHR){
$(“#令牌占位符”)。替换为(数据);
}
});
});
根据ValidateAntiforgeryToken属性,只要表单过帐有效,此操作就有效
问题
以这种方式向表单添加反伪造令牌是否存在安全问题?
有没有更简单的方法让我不干呢?
<script>
@functions{
public string TokenHeaderValue()
{
string cookieToken, formToken;
AntiForgery.GetTokens(null, out cookieToken, out formToken);
return cookieToken + ":" + formToken;
}
}
$.ajax("/antiforgery/token", {
type: "post",
contentType: "application/json",
data: { }, // JSON data goes here
dataType: "json",
headers: {
'RequestVerificationToken': '@TokenHeaderValue()'
}
});
</script>
@功能{
公共字符串TokenHeaderValue()
{
字符串cookieToken,formToken;
antifforgery.GetTokens(null,out-cookieToken,out-formToken);
返回cookieToken+“:”+formToken;
}
}
$.ajax(“/antiforgery/token”{
类型:“post”,
contentType:“应用程序/json”,
data:{},//JSON数据在这里
数据类型:“json”,
标题:{
“RequestVerificationToken”:“@TokenHeaderValue()”
}
});
处理请求时,从请求头提取令牌。然后调用AntiForgery.Validate方法来验证令牌。如果令牌无效,Validate方法将引发异常
void ValidateRequestHeader(HttpRequestMessage request)
{
string cookieToken = "";
string formToken = "";
IEnumerable<string> tokenHeaders;
if (request.Headers.TryGetValues("RequestVerificationToken", out tokenHeaders))
{
string[] tokens = tokenHeaders.First().Split(':');
if (tokens.Length == 2)
{
cookieToken = tokens[0].Trim();
formToken = tokens[1].Trim();
}
}
AntiForgery.Validate(cookieToken, formToken);
}
void ValidateRequestHeader(HttpRequestMessage请求)
{
字符串cookieToken=“”;
字符串formToken=“”;
IEnumerable标记头;
if(request.Headers.TryGetValues(“RequestVerificationToken”,out-tokenHeaders))
{
string[]tokens=tokenHeaders.First().Split(“:”);
if(tokens.Length==2)
{
cookieToken=tokens[0]。Trim();
formToken=tokens[1].Trim();
}
}
防伪。验证(cookieToken,formToken);
}