zoukankan      html  css  js  c++  java
  • MVC防止xss攻击 ——Html.AntiForgeryToken的AJAX提交

    1、在Html表单里面使用了@Html.AntiForgeryToken()就可以阻止CSRF攻击。

    2、相应的我们要在Controller中也要加入[ValidateAntiForgeryToken]过滤特性。该特性表示检测服务器请求是否被篡改。注意:该特性只能用于post请求,get请求无效。

    3、至于JS,我们的项目中引用的是<script src="@Url.Content("~/Content/js/jqueryToken-1.4.2.js")" type="text/JavaScript"></script>

    在JS时要使用: $.ajaxAntiForgery才行,
    如:
     $.ajaxAntiForgery({
                type: "post",
                data: { GroupName: $("#GroupName").val(), GroupPhones: $("#GroupPhones").val() },
                dataType: "json",
                url: "/Event/Mass/AddGroup",
                success: function (data) {
                    if (data) {

                        alert("添加成功 ");
                        $.unblockUI();
                    }
                    else {
                        alert("添加失败 ");
                    }
             }
     })

    注:对数据进行增删改时要防止csrf攻击!

    另外一种方式

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }
    
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Index(string someValue)
        {
            return Json(new { someValue = someValue });
        }
    }
    @using (Html.BeginForm(null, null, FormMethod.Post, new { id = "__AjaxAntiForgeryForm" }))
    {
        @Html.AntiForgeryToken()
    }
    
    <div id="myDiv" data-url="@Url.Action("Index", "Home")">
        Click me to send an AJAX request to a controller action
        decorated with the [ValidateAntiForgeryToken] attribute
    </div>
    
    <script type="text/javascript">
        $('#myDiv').submit(function () {
            var form = $('#__AjaxAntiForgeryForm');
            var token = $('input[name="__RequestVerificationToken"]', form).val();
            $.ajax({
                url: $(this).data('url'),
                type: 'POST',
                data: { 
                    __RequestVerificationToken: token, 
                    someValue: 'some value' 
                },
                success: function (result) {
                    alert(result.someValue);
                }
            });
            return false;
        });
    </script>
  • 相关阅读:
    Java之字符串String,StringBuffer,StringBuilder
    去除前后空格,Oracle和SQLSERVER都适用。ltrim(rtrim(’ ‘))
    java IO,bufferedReader类
    Python与操作系统有关的模块
    u盘引导制作工具
    Shell中判断语句if中-z至-d的意思
    shell脚本输出带颜色字体
    MySQL数据库权限管理
    vi/vim使用进阶: 文件浏览和缓冲区浏览
    (转载)跟我一起学习VIM
  • 原文地址:https://www.cnblogs.com/l1pe1/p/6030841.html
Copyright © 2011-2022 走看看