Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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 使用来自WebForm的MVC2 AntiforgeryToken 背景_Asp.net_Ajax_Asp.net Mvc 2_Antiforgerytoken - Fatal编程技术网

Asp.net 使用来自WebForm的MVC2 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="

我需要从WebForms页面(托管在cms中)使用AntiForgeryToken。页面应将数据发布到解决方案中的MVC2.0操作。该操作应使用ValidateAntiForgeryToken属性

我确实从这里尝试了解决方案:但它似乎不起作用,因为控制器操作将呈现的antiforgerytoken标记为无效

当前解决方案 现在我已经解决了这个问题,这样我就有了一个操作,可以呈现只包含带有antiforgerytoken的输入标记的部分视图

查看

<%@ 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);
}