让你的ASP.NET Core应用程序更安全

对于ASP.NET Core应用程序,除了提供认证和授权机制来保证服务的安全性,还需要考虑下面的一些安全因素:

  1. CSRF
  2. 强制HTTPS
  3. 安全的HTTP Headers

CSRF

ASP.NET Core通过AntiForgeryToken来阻止CSRF攻击,一般来说,当用户做表单提交的时候,表单中隐藏的token也会被提交到服务端,与此同时cookie中包含的另一半token也被提交到服务端,服务端通过合并两份token来验证客户端的数据是否有效。

例如在ASP.NET Core中通过下面的方式渲染表单:

<form asp-controller="Manage" asp-action="ChangePassword" method="post">
<!-- Form details -->
</form>

这样会生成下面的html,表单会包含一个隐藏的token

<form method="post" action="/Manage/ChangePassword">
<!-- Form details -->
<input name="__RequestVerificationToken" type="hidden" value="CfDJ8NrAkSldwD9CpLR...LongValueHere!" />
</form>

服务端的代码通过在对应的action上标记ValidateAntiForgeryToken来验证客户端的请求

public class ManageController
{
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult ChangePassword()
{
// ...
return View();
}
}

是不是每个POST请求都需要添加这样的attribute呢?

ASP.NET Core中有Filter的概念,通过添加全局Filter就能帮我们达到这样的目的:

public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(options =>
{
options.Filters.Add(new AutoValidateAntiforgeryTokenAttribute());
});
}
}

AutoValidateAntiforgeryTokenAttribute会自动忽略不需要做CSRF验证的请求类型,例如HttpGet请求。

强制HTTPS

为了让服务更加安全,你还可以强制用户使用https,你可以通过配置API网关的方式达到这个目的,也可以使用ASP.NET Core自带的特性。

使用了RequireHttpsAttribute之后,http请求将会报错。

 services.Configure<MvcOptions>(options =>
{
options.Filters.Add(new RequireHttpsAttribute());
});

通过下面的方式强行跳转到https。

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseHttpsRedirection();
}

让HTTP Header更加安全

通过https://securityheaders.com/来检查HTTP Header是不是安全,例如下面的扫描结果:



NWebsec是一个用来做安全相关的ASP.NET Core类库,针对ASP.NET Core中HTTP Header相关的修复,可以添加下面的Nuget包:

NWebsec.AspNetCore.Middleware
  • Strict-Transport-Security:为了告诉浏览器所有的资源都必须使用https,你需要添加这个header:
app.UseHsts(hsts => hsts.MaxAge(365));
  • Redirect validation: 一旦启用了这个中间件,只能被Redirect到允许的站点, 否则会触发RedirectValidationException
app.UseRedirectValidation(opts =>
{
opts.AllowSameHostRedirectsToHttps();
opts.AllowedDestinations("https://www.google.com/accounts/");
});
  • Referrer-Policy: 当用户点击了浏览器上的连接,请求报头中Referrer用来表示连接的来源,这个特性也可以用来做一些数据分析,通过Referrer-Policy可以控制是否显示Referrer:
app.UseReferrerPolicy(opts => opts.NoReferrer());
  • Content-Security-Policy:内容安全策略,这个http header可以让浏览器自动禁止外部注入恶意脚本,例如下面的策略将限制所有的脚本只能从同域加载:
'Content-Security-Policy': 'script-src \'self\''

下面的脚本引用将会引起浏览器报错:

<script type="text/javascript"
src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>

使用NWebsec配置Content-Security-Policy:

app.UseCsp(options => options
.DefaultSources(s => s.Self())
.ScriptSources(s => s.Self().CustomSources("scripts.nwebsec.com"))
.ReportUris(r => r.Uris("/report")));
  • X-XSS-Protection: 防XSS攻击设置
app.UseXXssProtection(options => options.EnabledWithBlockMode());
  • X-Content-Type-Options: 如果服务器发送响应头 X-Content-Type-Options: nosniff,则 script 和 styleSheet 元素会拒绝包含错误的 MIME 类型的响应。这是一种安全功能,有助于防止基于 MIME 类型混淆的攻击。
app.UseXContentTypeOptions();

其他的安全设置参考NWebsec文档

让你的ASP.NET Core应用程序更安全的更多相关文章

  1. (转) 将ASP.NET Core应用程序部署至生产环境中(CentOS7)

    原文链接: http://www.cnblogs.com/ants/p/5732337.html 阅读目录 环境说明 准备你的ASP.NET Core应用程序 安装CentOS7 安装.NET Cor ...

  2. ASP.NET Core 中文文档 第二章 指南(1)用 Visual Studio Code 在 macOS 上创建首个 ASP.NET Core 应用程序

    原文:Your First ASP.NET Core Application on a Mac Using Visual Studio Code 作者:Daniel Roth.Steve Smith ...

  3. ASP.NET Core 中文文档 第二章 指南(8) 使用 dotnet watch 开发 ASP.NET Core 应用程序

    原文:Developing ASP.NET Core applications using dotnet watch 作者:Victor Hurdugaci 翻译:谢炀(Kiler) 校对:刘怡(Al ...

  4. 在Mac下运行ASP.NET Core应用程序

    在Mac下运行ASP.NET Core应用程序 通过参照.NET Core相关官方文档,在我的Mac电脑上用Visual Studio Code创建了我的第一个ASP.NET应用. 开发环境搭建 首先 ...

  5. 将ASP.NET Core应用程序部署至生产环境中(CentOS7)

    这段时间在使用Rabbit RPC重构公司的一套系统(微信相关),而最近相关检验(逻辑测试.压力测试)已经完成,接近部署至线上生产环境从而捣鼓了ASP.NET Core应用程序在CentOS上的部署方 ...

  6. Jexus针对Asp.net core应用程序的六大不可替代的优势

    1,配置简便:在Jexus上,Asp.net core只是Jexus上的一个"站点",因此,只需在Jexus上配置这个站点就行,无需其它配置: 2,操作统一:Jexus停止这个站点 ...

  7. 使用VS Code开发ASP.NET Core 应用程序

    最新教程:http://www.cnblogs.com/linezero/p/VSCodeASPNETCore.html 使用VS Code开发ASP.NET Core 应用程序 准备 1.安装VS ...

  8. 将ASP.NET Core应用程序部署至生产环境中(CentOS7)(转)

    阅读目录 环境说明 准备你的ASP.NET Core应用程序 安装CentOS7 安装.NET Core SDK for CentOS7. 部署ASP.NET Core应用程序 配置Nginx 配置守 ...

  9. Mac下运行ASP.NET Core应用程序

    Mac下运行ASP.NET Core应用程序 在Mac下运行ASP.NET Core应用程序 通过参照.NET Core相关官方文档,在我的Mac电脑上用Visual Studio Code创建了我的 ...

随机推荐

  1. Spring Boot自动配置源码解析(基于Spring Boot 2.0.2.RELEASE)

    在Spring Boot官方介绍中,首一段话是这样的(如下图).我们可以大概了解到其所表达的含义:我们可以利用Spring Boot写很少的配置来创建一个非常方便的基于Spring整合第三方类库的单体 ...

  2. BZOJ_2956_模积和_数学

    BZOJ_2956_模积和_数学 Description 求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j<=m,i≠j. Input 第一行两个数 ...

  3. jsp 基础知识之指令元素

    由于考研和结业的事情,这里荒废了许久,而如今重新捡起来,是因为带到公司的碳素笔没有油了......    jsp的指令元素:通常以<%@开始,以%>结尾. jsp主要包括三种指令元素:pa ...

  4. Oracle系列-锁表与解锁解决方案(基础版)

    [Oracle锁表查询和解锁解决方案] 一.了解原因(借鉴整理) 数据库操作语句的分类 DDL:数据库模式定义语言,关键字:createDML:数据操纵语言,关键字:Insert.delete.upd ...

  5. 使用NOOBS给树莓派安装系统Raspbian

    使用NOOBS给树莓派安装系统Raspbian --英文原版教程:https://www.raspberrypi.org/learning/software-guide/quickstart/ 1.原 ...

  6. H5移动端项目案例、web手机微商城实战开发

    自微信生态圈一步步强大后,关于移动端购物的趋势,逐渐成为大众关心的内容,目前市场上关于移动商城的制定就有大量版本,比如.微商城.移动商城.移动webAPP.微信商城各等各种定义层出不穷,这就对于移动端 ...

  7. 我的微服务观,surging 2.0将会带来多大的改变

    Surging 自2017年6月16日开源以来,已收到不少公司的关注或者使用,其中既有以海克斯康超大型等外企的关注,也不乏深圳泓达康.重庆金翅膀等传统行业的正式使用,自2019年年初,surging2 ...

  8. 经典卷积神经网络结构——LeNet-5、AlexNet、VGG-16

    经典卷积神经网络的结构一般满足如下表达式: 输出层 -> (卷积层+ -> 池化层?)+  -> 全连接层+ 上述公式中,“+”表示一个或者多个,“?”表示一个或者零个,如“卷积层+ ...

  9. 游戏AI之初步介绍(0)

    目录 游戏AI是什么? 游戏AI和理论AI 智能的假象 (更新)游戏AI和机器学习 介绍一些游戏AI 4X游戏AI <求生之路>系列 角色扮演/沙盒游戏中的NPC 游戏AI 需要学些什么? ...

  10. 设计模式之适配者模式——Java语言描述 | Amos H's blog

    适配器模式是作为两个不兼容的接口之间的桥梁.这种类型的设计模糊属于结构性模式,它结合了两个独立接口的功能 概念阐述 使用适配器模式可以解决在软件系统中,将一些旧的类放入新环境中,但是新环境要求的接口旧 ...