zoukankan      html  css  js  c++  java
  • ASP.NET MVC ajax提交 防止CSRF攻击

    //在View中

    <script type="text/javascript">
    @functions{
    public string ToKenHeaderValue()
    {
    string cookieToken,fromToken;
    AntiForgery.GetTokens(null,out cookieToken,out fromToken);
    return cookieToken+":"+fromToken;
    }
    }

    $function({

    ......
    $.ajax("api/Value",{
    data:{...},
    type:'post',
    dataType:'json',
    headers:{'RequestVerificationToKen':'@ToKenHeaderValue()'},
    success:fucntion(data){....}
    })
    })
    </script>



    //自己写的过滤器
    public class MyValidateAntiForgeryToKenAttribute:FileterAttribute,IAuthorizationFilter
    {
    private void ValidateRequestHeader(HttpRequestBase request)
    {
    string cookieToKen="";
    string fromToKen="";
    string tokenValue=request.Header["RequestVerificationToKen"];
    if(!string.IsNullOrEmpty(tokenValue))
    {
    string[] tokens=tokenValue.Split(':');
    if(tokens.Length=2)
    {
    cookieToken=tokens[0].Trim();
    fromToKen=tokens[1].Trim();
    }
    }
    AntiForGery.Validate(cookieToken,fromToken);
    }
    }

    public void OnAuthiorization(AuthorizationContexte context)
    {
    try
    {
    if(context.HttpContext.Request.IsAjaxRequest())//判断是否ajax提交
    {
    ValidateRequetHeader(context.HttpContext.Request);
    }
    else
    AntiForgery.Validate();
    }
    catch
    {
    throw new HttpAntiForgeryException("...");
    }

    在Controller的Action中

    1 [HttpPost]//指示POST提交
    2 [MyValidateAntiForgeryToKen]//这儿调用自己写的过滤器,实现防止CSRF攻击
    3 public ActionResult Value()
    4 {
    5 .......
    6 }

  • 相关阅读:
    Android App常规测试内容
    腾讯的专项测试之道
    PyCharm Python迁移项目
    互联网架构的演变
    unittest最详细的解说
    (转)Python开发规范
    Python3.0+Selenium3进行Web自动化遇到的坑
    测试开发之路--英雄迟暮,我心未老
    团队作业9——事后分析(Beta版本)
    团队作业8--测试与发布(Beta阶段)
  • 原文地址:https://www.cnblogs.com/haoxiaozhang/p/3925237.html
Copyright © 2011-2022 走看看