一、在From 表单中生成 antiforgery 令牌  

  1. ASP.NET Core MVC 和 Razor 页模板中的窗体的所有生成 antiforgery 令牌,唯一且不可预测。服务器先发送到客户端的当前用户的标识相关联的令牌。客户端返回将令牌发送到服务器进行验证。如果服务器收到与经过身份验证的用户的标识不匹配的令牌,将拒绝请求。

<body>
<form action="/Antiforgery/Post" method="post"> @Html.AntiForgeryToken() <input type="text" name="id" /> <button type="submit">提交</button>
</form> @{
using (Html.BeginForm("Post", "Antiforgery", FormMethod.Post))
{
<input type="text" name="id" /> <button type="submit">提交</button>
} }
</body>

  2. 用 [ValidateAntiForgeryToken] 属性修饰需要验证的放法。ValidateAntiForgeryToken 属性需要对操作方法请求修饰,包括 HTTP GET 请求令牌。

public class AntiforgeryController:Controller
{ public IActionResult Index()
{
return View();
} [ValidateAntiForgeryToken]
public JsonResult Post(string id)
{
return Json("success");
}
}

  3. AutoValidateAntiforgeryToken 可以修饰控制器类,其作用于所有Post请求。

    [AutoValidateAntiforgeryToken]
public class AntiforgeryController:Controller
{ public IActionResult Index()
{
return View();
} [HttpPost]
public JsonResult Post(string id)
{
return Json("success");
} [HttpPost]
public JsonResult PostTest()
{
return Json("");
}
}

二、Ajax的方式使用 antiforgery 令牌  

  1. 在配置自定义防伪功能,指定HeaderName

public void ConfigureServices(IServiceCollection services)
{
services.AddAntiforgery(op =>
{
op.FormFieldName = "AntiforgeryField";
op.HeaderName = "VerificationToken";//手动高亮
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}

  2. 在页面上生成antiforgery令牌

@inject Microsoft.AspNetCore.Antiforgery.IAntiforgery Antiforgery
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<input type="hidden" id="token" value="@Antiforgery.GetAndStoreTokens(Context).RequestToken"/>
</body>
</html>

  3. 把令牌存放到headers中调用ajax

@inject Microsoft.AspNetCore.Antiforgery.IAntiforgery Antiforgery
@{
Layout = null;
} <!DOCTYPE html> <html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<input type="hidden" id="token" value="@Antiforgery.GetAndStoreTokens(Context).RequestToken"/> <script src="~/lib/jquery/dist/jquery.js"></script>
<script>
$.ajax({
url: "/Antiforgery/Index",
type: "post",
data: { id: "123" },
headers: { VerificationToken: $("#token").val() },
success: function (r) {
console.log(r);
},
error: function (e) {
console.log(e);
}
});
</script>

</body>
</html>

.Net Core 防止跨站点请求伪造的更多相关文章

  1. ASP.NET Core 防止跨站请求伪造(XSRF/CSRF)攻击

    什么是反伪造攻击? 跨站点请求伪造(也称为XSRF或CSRF,发音为see-surf)是对Web托管应用程序的攻击,因为恶意网站可能会影响客户端浏览器和浏览器信任网站之间的交互.这种攻击是完全有可能的 ...

  2. ASP.NET Core 防止跨站请求伪造(XSRF/CSRF)攻击 (转载)

    什么是反伪造攻击? 跨站点请求伪造(也称为XSRF或CSRF,发音为see-surf)是对Web托管应用程序的攻击,因为恶意网站可能会影响客户端浏览器和浏览器信任网站之间的交互.这种攻击是完全有可能的 ...

  3. Python Django框架笔记(四):数据分页和CSRF跨站点请求伪造

    (一)数据分页  可以参考  https://docs.djangoproject.com/en/2.0/topics/pagination/ 模板:如果只要显示 1.2.3.4.5.6....的话, ...

  4. 跨站点请求伪造(CSRF)学习

    一.CSRF介绍 伪造一个站点,在站点中伪造一个向其他站点的请求,在用户访问该站点时让用户执行 假设有如下URL能删除一篇文章: 攻击者在自己的域中构造一个页面: 内容为: 使用一个img标签,其地址 ...

  5. asp.net mvc 安全测试漏洞 "跨站点请求伪造" 问题解决

    IBM Security Appscan漏洞筛查-跨站请求伪造,该漏洞的产生,有多种情况: 1.WebApi的跨站请求伪造,需要对WebApi的请求头部做限制(此文不做详细介绍): 2.MVC Act ...

  6. python---xss(Cross Site Scripting)跨站脚本攻击和csrf(xsrf)跨站点请求伪造(Cross—Site Request Forgery)攻击

    xss跨站脚本攻击:恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的. 例如:某些论坛允许用户自由发言,而 ...

  7. 跨站点请求伪造(CSRF)

    一.前言 跨站点请求伪造(Cross-SiteRequest Forgeries, CSRF),是指攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息或设定信息等某些状态更新,属于被动 ...

  8. web客户端安全之跨站点请求伪造攻击

    CSRF攻击,Cross-site request forgery,跨站点请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种 ...

  9. [不常用] - CSRF(跨站点请求伪造)

    CSRF,Cross Site Request Forgery,即跨站点请求伪造.   这种攻击是指,在用户正常登录系统以后,攻击者诱使用户访问一些非法链接,以执行一些非法操作. 比如:如果删除用户操 ...

随机推荐

  1. 使用Cubic Spline通过一组2D点绘制平滑曲线

    原文Draw a smooth curve through a set of 2D points with Cubic Spline I would like to provide you with ...

  2. Android Camera2 拍照(三)——切换摄像头,延时拍摄和闪光模式

    原文:Android Camera2 拍照(三)--切换摄像头,延时拍摄和闪光模式 一.切换摄像头 在前后摄像头之间切换,首先需要关闭之前打开的摄像头,关闭preview,之后重新打开新的摄像头,重新 ...

  3. Win10《芒果TV - Preview》更新至v3.1.57.0:热门节目和电视台直播回归

    Win10<芒果TV - Preview>是Win10<芒果TV>官方唯一指定内测预览版,最新的改进和功能更新将会在此版本优先体验. 为了想让大家能在12月31日看到<湖 ...

  4. MIPS虚拟机代码

    http://download.eeworld.com.cn/download/mamselc/472333http://download.eeworld.com.cn/detail/lamas/36 ...

  5. BI-学习之 商业智能项目工具安装

    首先咱们先需要下载一个工具,Microsoft SQL Server Data Tools - Business Intelligence for Visual Studio 2012并安装: 我目前 ...

  6. C++ crash 堆栈信息获取(三篇)

    最近在做程序异常时堆栈信息获取相关工作,上一篇文章成功的在程序creash时写下了dump文件,而有些情况写dump文件是 不可以的,比如在jni开发时,C++只做底层处理,而整个项目是android ...

  7. Delphi berlin ShowMessage的改进与使用

    这个版本的delphi对ShowMessage进行了重新实现,更好的适应移动跨平台,即在移动平台下是异步执行的,而在Windows及os X下是同步执行的,如果自己控制是否异步显示对话框,也可以通过T ...

  8. c# HttpWebRequest https的一些处理

    先看下请求方法 public string Get_Request( string strUrl, CookieContainer _cookie = null, string strHost = & ...

  9. shell把文件批量导入mysql

    for file in ./tmp_data/* do echo $file mysql -u'root' -p'wangbin' --default-character-set=utf8 -e&qu ...

  10. 【vue系列】Virtual DOM 真的比操作原生 DOM 快吗?

    一.前言 网上都说操作真实dom怎么怎么慢,这儿有个例子:http://chrisharrington.github.io/demos/performance/,例子循环2000个随机数组,点击按钮重 ...