一、在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. Post ,Get 请求

    http://blog.csdn.net/pan_junbiao/article/details/9155497

  2. C# Windows服务以指定用户运行

    参考一下 https://bbs.csdn.net/topics/330151879 服务程序以Local System安装运行没问题,但用这个账户运行的服务无法访问局域网共享资源,比较麻烦,所以想指 ...

  3. 将多个文本文件内的数据导入到Datagridview

    private BindingList listXSxxInfoList = new BindingList(); openFileDialog1.Multiselect = true;//允许选择多 ...

  4. SMC状态机笔记

    %class 状态机所作用的类 %package 类所在的包 %fsmclass 生成类的类名 %fsmfile 生成类的文件名 %access 生成类的可访问级别 %start 指定状态机的开始状态 ...

  5. 把握每次机会,麒麟芯片5年成就高端(SoC包括AP、基带、ISP等,华为确实牛)

    从2016年11月华为Mate 9 /Mate 9 Pro发布,到2017年2月荣耀V9和华为P10 /P10 Plus 相继发布,这几款都是华为和荣耀的高端旗舰机型,且搭载的都是华为最新旗舰芯片-- ...

  6. strlen源码剖析(可查看glibc和VC的CRT源代码)

    学习高效编程的有效途径之一就是阅读高手写的源代码,CRT(C/C++ Runtime Library)作为底层的函数库,实现必然高效.恰好手中就有glibc和VC的CRT源代码,于是挑了一个相对简单的 ...

  7. QT5 屏幕旋转90度

    主要思路是将所有项目界面加载到QGraphicsScene,再进行旋转操作.直接上代码#include <QApplication>#include <QGraphicsView&g ...

  8. OpenSSL的命令行用法,以及参数大全

    c:\openssl\bin>opensslOpenSSL> versionOpenSSL 1.0.2j 26 Sep 2016OpenSSL> https://wiki.opens ...

  9. Delphi结束进程模块

    function KillTask(ExeFileName: string): integer; const PROCESS_TERMINATE = $0001; var ContinueLoop: ...

  10. SQL数据库连接池与C#关键字return

    SQL数据库连接池: 先前做的一个Sharepoint项目,在上线后的不久,最近一直出现间歇性访问缓慢问题Sharepoint特性问题,并分析了其数据库服务器,发现所耗内存已经达到了97%. 所以断定 ...