宁波做外贸网站建设,淘宝网网站开发部技术部,山西省建设银行网站,巴中城乡建设官方网站对于ASP.NET Core应用程序#xff0c;除了提供认证和授权机制来保证服务的安全性#xff0c;还需要考虑下面的一些安全因素#xff1a;CSRF强制HTTPS安全的HTTP HeadersCSRFASP.NET Core通过AntiForgeryToken来阻止CSRF攻击#xff0c;一般来说#xff0c;当用户做表单提交… 对于ASP.NET Core应用程序除了提供认证和授权机制来保证服务的安全性还需要考虑下面的一些安全因素CSRF强制HTTPS安全的HTTP HeadersCSRFASP.NET Core通过AntiForgeryToken来阻止CSRF攻击一般来说当用户做表单提交的时候表单中隐藏的token也会被提交到服务端与此同时cookie中包含的另一半token也被提交到服务端服务端通过合并两份token来验证客户端的数据是否有效。例如在ASP.NET Core中通过下面的方式渲染表单:form asp-controllerManageasp-actionChangePassword methodpost !-- Form details --/form这样会生成下面的html表单会包含一个隐藏的tokenform methodpost action/Manage/ChangePassword !-- Form details -- input name__RequestVerificationToken typehidden valueCfDJ8NrAkSldwD9CpLR...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.ConfigureMvcOptions(options { options.Filters.Add(new RequireHttpsAttribute()); });通过下面的方式强行跳转到https。public void Configure(IApplicationBuilder app, IHostingEnvironment env){ app.UseHttpsRedirection();}通过https://securityheaders.com/来检查HTTP Header是不是安全例如下面的扫描结果NWebsec是一个用来做安全相关的ASP.NET Core类库针对ASP.NET Core中HTTP Header相关的修复可以添加下面的Nuget包NWebsec.AspNetCore.MiddlewareStrict-Transport-Security为了告诉浏览器所有的资源都必须使用https你需要添加这个header:app.UseHsts(hsts hsts.MaxAge(365));Redirect validation: 一旦启用了这个中间件只能被Redirect到允许的站点, 否则会触发RedirectValidationExceptionapp.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可以让浏览器自动禁止外部注入恶意脚本例如下面的策略将限制所有的脚本只能从同域加载1Content-Security-Policy: script-src \self\下面的脚本引用将会引起浏览器报错script typetext/javascriptsrchttps://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文档。原文地址https://www.cnblogs.com/xiandnc/p/10738939.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com