最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

切記ajax中要帶上AntiForgeryToken防止CSRF攻擊

 更新時間:2015年10月23日 10:34:39   投稿:mrr  
在程序項目中經常看到ajax post數(shù)據(jù)到服務器沒有加上防偽標記,導致CSRF被攻擊,下面小編通過本篇文章給大家介紹ajax中要帶上AntiForgeryToken防止CSRF攻擊,感興趣的朋友一起學習吧

經常看到在項目中ajax post數(shù)據(jù)到服務器不加防偽標記,造成CSRF攻擊

在Asp.net Mvc里加入防偽標記很簡單在表單中加入Html.AntiForgeryToken()即可。

Html.AntiForgeryToken()會生成一對加密的字符串,分別存放在Cookies 和 input 中。

我們在ajax post中也帶上AntiForgeryToken

@model WebApplication1.Controllers.Person
@{
 ViewBag.Title = "Index";
}
<h2>Index</h2>
<form id="form1">
 <div class="form-horizontal">
  <h4>Persen</h4>
  <hr />
  @Html.ValidationSummary(true, "", new { @class = "text-danger" })
  <div class="form-group">
   @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })
   <div class="col-md-10">
    @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
    @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
   </div>
  </div>
  <div class="form-group">
   @Html.LabelFor(model => model.Age, htmlAttributes: new { @class = "control-label col-md-2" })
   <div class="col-md-10">
    @Html.EditorFor(model => model.Age, new { htmlAttributes = new { @class = "form-control" } })
    @Html.ValidationMessageFor(model => model.Age, "", new { @class = "text-danger" })
   </div>
  </div>
  <div class="form-group">
   <div class="col-md-offset-2 col-md-10">
    <input type="button" id="save" value="Create" class="btn btn-default" />
   </div>
  </div>
 </div>
</form>
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
<script type="text/javascript">
 $(function () {
  //var token = $('[name=__RequestVerificationToken]');
  //獲取防偽標記
  var token = $('@Html.AntiForgeryToken()').val();
  var headers = {};
  //防偽標記放入headers
  //也可以將防偽標記放入data
  headers["__RequestVerificationToken"] = token;
  $("#save").click(function () {
   $.ajax({
    type: 'POST',
    url: '/Home/Index',
    cache: false,
    headers: headers,
    data: { Name: "yangwen", Age: "1" },
    success: function (data) {
     alert(data)
    },
    error: function () {
     alert("Error")
    }
   });
  })
 })
</script>

放在cookies里面的加密字符串

控制器中代碼

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Helpers;
using System.Web.Mvc;
namespace WebApplication1.Controllers
 {
 public class HomeController : Controller
  {
  public ActionResult Index()
   {
   return View();
   }
  [HttpPost]
  [MyValidateAntiForgeryToken]
  public ActionResult Index(Person p)
   {
   return Json(true, JsonRequestBehavior.AllowGet);
   }
  }
 public class Person
  {
  public string Name { get; set; }
  public int Age { get; set; }
  }
 public class MyValidateAntiForgeryToken : AuthorizeAttribute
  {
  public override void OnAuthorization(AuthorizationContext filterContext)
   {
   var request = filterContext.HttpContext.Request;
   if (request.HttpMethod == WebRequestMethods.Http.Post)
    {  
    if (request.IsAjaxRequest())
     {
     var antiForgeryCookie = request.Cookies[AntiForgeryConfig.CookieName];
     var cookieValue = antiForgeryCookie != null
      ? antiForgeryCookie.Value
      : null;
     //從cookies 和 Headers 中 驗證防偽標記
     //這里可以加try-catch
     AntiForgery.Validate(cookieValue, request.Headers["__RequestVerificationToken"]);
     }
    else
     {
     new ValidateAntiForgeryTokenAttribute()
      .OnAuthorization(filterContext);
     }
    }
   }
  }
 }

這里注釋掉ajax中防偽標記在請求

$("#save").click(function () {
 $.ajax({
  type: 'POST',
  url: '/Home/Index',
  cache: false,
 //  headers: headers,
  data: { Name: "yangwen", Age: "1" },
  success: function (data) {
   alert(data)
  },
  error: function () {
   alert("Error")
  }
 });
})

默認返回500的狀態(tài)碼。

這里修改ajax中的防偽標記

  $(function () {
 //var token = $('[name=__RequestVerificationToken]');
 //獲取防偽標記
 var token = $('@Html.AntiForgeryToken()').val();
 var headers = {};
 //防偽標記放入headers
 //也可以將防偽標記放入data
 headers["__RequestVerificationToken"] = token+11111111111111111111111111111111111;
 $("#save").click(function () {
  $.ajax({
   type: 'POST',
   url: '/Home/Index',
   cache: false,
    headers: headers,
   data: { Name: "yangwen", Age: "1" },
   success: function (data) {
    alert(data)
   },
   error: function () {
    alert("Error")
   }
  });
 })
})

也是500的狀態(tài)碼。

以上內容就是本文的全部敘述,切記ajax中要帶上AntiForgeryToken防止CSRF攻擊,小伙伴們在使用過程發(fā)現(xiàn)有疑問,請給我留言,謝謝!

相關文章

  • Ajax添加數(shù)據(jù)與刪除篇實現(xiàn)代碼

    Ajax添加數(shù)據(jù)與刪除篇實現(xiàn)代碼

    Hello 大家好!這個ajax系列教程講到這里已經完成50%了.第4篇講了ajax向數(shù)據(jù)庫添加數(shù)據(jù),第5篇講了ajax修改數(shù)據(jù)庫中的數(shù)據(jù).今天我們來講ajax添加數(shù)據(jù)與刪除并存的實例效果.
    2010-10-10
  • Ajax的內部實現(xiàn)機制、原理與實踐小結

    Ajax的內部實現(xiàn)機制、原理與實踐小結

    AJAX全稱為"Asynchronous JavaScript and XML"(異步JavaScript和XML),Ajax不是一個技術,它實際上是幾種技術,每種技術都有其獨特這處,合在一起就成了一個功能強大的新技術。
    2010-06-06
  • 關于異步請求ajax原理以及原生Ajax、$.ajax的基本使用詳解

    關于異步請求ajax原理以及原生Ajax、$.ajax的基本使用詳解

    這篇文章主要介紹了關于異步請求ajax原理以及原生Ajax、$.ajax的基本使用詳解,ajax現(xiàn)在是前后端交互的重要工具,可以說,只要從事于it行業(yè),ajax那就是必須要掌握的一名技術,下面我們就來對ajax進行介紹,需要的朋友可以參考下
    2023-05-05
  • AJAX簡歷系統(tǒng)附js文件

    AJAX簡歷系統(tǒng)附js文件

    AJAX簡歷系統(tǒng)附js文件...
    2007-08-08
  • Ajax客戶端異步調用服務端的實現(xiàn)方法(js調用cs文件)

    Ajax客戶端異步調用服務端的實現(xiàn)方法(js調用cs文件)

    下面小編就為大家分享一篇Ajax客戶端異步調用服務端的實現(xiàn)方法(js調用cs文件),具有很好的參考價值,希望對大家有所幫助
    2017-12-12
  • 通過Ajax兩種方式講解Struts2接收數(shù)組表單的方法

    通過Ajax兩種方式講解Struts2接收數(shù)組表單的方法

    使用struts2表單傳值,可以傳一個或者是作為一個對象的各個屬性傳,都非常靈活便捷。但是如果我們需要傳一個數(shù)組并希望struts正確接收,該怎么處理呢?接下來,通過本文給大家介紹通過Ajax兩種方式講解Struts2接收數(shù)組表單的方法,需要的朋友可以參考下
    2015-10-10
  • ajax提交加載進度條示例代碼

    ajax提交加載進度條示例代碼

    提交加載進度條的實現(xiàn)方法有很多,在本文將為大家詳細介紹下,使用ajax是如何實現(xiàn)的,下面有個不錯的示例,大家可以感受下
    2013-10-10
  • Ajax 學習資源 中外都有

    Ajax 學習資源 中外都有

    Ajax 學習資源 中外都有...
    2007-09-09
  • Ajax核心XMLHttpRequest總結

    Ajax核心XMLHttpRequest總結

    本文主要是給大家總結了一下Ajax的核心內容XMLHttpRequest的相關知識,十分的詳細,推薦給大家,需要的小伙伴參考下。
    2015-02-02
  • 關于ajax異步訪問數(shù)據(jù)的問題

    關于ajax異步訪問數(shù)據(jù)的問題

    這篇文章主要介紹了ajax異步訪問數(shù)據(jù)的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08

最新評論

安阳市| 攀枝花市| 大丰市| 茶陵县| 长沙市| 顺平县| 巩义市| 遵化市| 遵化市| 田林县| 扎囊县| 曲靖市| 贵定县| 衡东县| 永昌县| 古交市| 抚宁县| 明溪县| 台州市| 庆云县| 云安县| 凌海市| 电白县| 汤原县| 兖州市| 信阳市| 伊宁市| 洪泽县| 上林县| 上林县| 本溪市| 雅江县| 海晏县| 高碑店市| 固原市| 大宁县| 大城县| 广灵县| 息烽县| 和平区| 盘山县|