asp.net core下給網(wǎng)站做安全設(shè)置的方法詳解
前言
本文主要介紹了關(guān)于asp.net core給網(wǎng)站做安全設(shè)置的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹吧
設(shè)置方法如下
首先,我們來看下stack overflow網(wǎng)站的請(qǐng)求頭文件:
可以看到一些我們熟悉或是陌生的HTTP頭部文件字段。
在這里我們?cè)趯?duì)HTTP輸入流的頭部文件中,做一些基本的防護(hù)。首先要明確,既然我們是對(duì)HTTP頭部做處理,那么就需要在Startup.cs類的
Configuration方法中做處理,因?yàn)檫@里就是處理HTTP輸入流的。
首先做一些基本的處理,比如中間件和基本的類:
public class SecurityHeadersPolicy { public IDictionary<string, string> SetHeaders { get; } = new Dictionary<string, string>(); public ISet<string> RemoveHeaders { get; } = new HashSet<string>(); }
這里的頭部信息是我們定義好的,用來增加或是刪除頭部信息,然后就是我們的中間件:
public class SecurityHeadersMiddleware { private readonly RequestDelegate _next; private readonly SecurityHeadersPolicy _policy; public SecurityHeadersMiddleware(RequestDelegate next, SecurityHeadersPolicy policy) { _next = next; _policy = policy; } public async Task Invoke(HttpContext context) { IHeaderDictionary headers = context.Response.Headers; foreach (var headerValuePair in _policy.SetHeaders) { headers[headerValuePair.Key] = headerValuePair.Value; } foreach (var header in _policy.RemoveHeaders) { headers.Remove(header); } await _next(context); } }
基于IApplicationBuilder接口做一個(gè)中間件的擴(kuò)展方法:
public static class MiddlewareExtensions { public static IApplicationBuilder UseSecurityHeadersMiddleware(this IApplicationBuilder app, SecurityHeadersBuilder builder) { SecurityHeaderPolicy policy = builder.Build(); return app.UseMiddleware<SecurityHeadersMiddleware>(policy); } }
封裝好相關(guān)的安全類:
public class SecurityHeadersBuilder { private readonly SecurityHeadersPolicy _policy = new SecurityHeadersPolicy(); public SecurityHeadersBuilder AddDefaultSecurePolicy() { AddFrameOptionsDeny(); AddXssProtectionBlock(); AddContentTypeOptionsNoSniff(); AddStrictTransportSecurityMaxAge(); RemoveServerHeader(); return this; } public SecurityHeadersBuilder AddFrameOptionsDeny() { _policy.SetHeaders[FrameOptionsConstants.Header] = FrameOptionsConstants.Deny; return this; } public SecurityHeadersBuilder AddFrameOptionsSameOrigin() { _policy.SetHeaders[FrameOptionsConstants.Header] = FrameOptionsConstants.SameOrigin; return this; } public SecurityHeadersBuilder AddFrameOptionsSameOrigin(string uri) { _policy.SetHeaders[FrameOptionsConstants.Header] = string.Format(FrameOptionsConstants.AllowFromUri, uri); return this; } public SecurityHeadersBuilder RemoveServerHeader() { _policy.RemoveHeaders.Add(ServerConstants.Header); return this; } public SecurityHeadersBuilder AddCustomHeader(string header, string value) { _policy.SetHeaders[header] = value; return this; } public SecurityHeadersBuilder RemoveHeader(string header) { _policy.RemoveHeaders.Add(header); return this; } public SecurityHeadersPolicy Build() { return _policy; } }
最后注入到HTTP的輸入流中:
app.UseSecurityHeadersMiddleware(new SecurityHeadersBuilder() .AddDefaultSecurePolicy() );
然后我們?yōu)g覽一下網(wǎng)頁,就可以在HTTP的頭部信息中看到:
HTTP/1.1 200 OK Content-Type: text/html; charset=utf-8 X-Frame-Options: DENY X-XSS-Protection: 1; mode=block X-Content-Type-Options: nosniff Strict-Transport-Security: max-age=31536000 X-Powered-By: ASP.NET
還有一個(gè)就是CSRF的防護(hù),如果之前你用過ASP.NET MVC,在最基本的MVC模板中,可能你會(huì)留意到已有的cshtml頁面中的form表單有這么一句:
@Html.AntiForgeryToken()
這就是微軟在MVC框架中為我們提供的防護(hù)CSRF的方法。我們?cè)诒韱沃兄苯邮褂蒙厦婺蔷浯a就可以了,然后在表單提交的Action方法中:
[ValidateAntiForgeryToken] [HttpPost] public IActionResult AntiForm(string message) { return Content(message); }
使用[ValidateAntiForgeryToken]屬性,來驗(yàn)證CSRF。
參考鏈接:
- How to add security headers in ASP.NET Core using custom middleware(如何使用自定義中間件在ASP.NET Core中添加安全標(biāo)頭)
- 初探CSRF在ASP.NET Core中的處理方式
代碼地址:
https://github.com/RyanOvO/aspnetcore-fileup-demo
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- .Net Core3 用Windows 桌面應(yīng)用開發(fā)Asp.Net Core網(wǎng)站
- 如何利用IIS調(diào)試ASP.NET網(wǎng)站程序詳解
- 利用IIS調(diào)試ASP.NET網(wǎng)站程序的完整步驟
- IIS部署asp.net mvc網(wǎng)站的方法
- ASP.NET Core 2.0 使用支付寶PC網(wǎng)站支付實(shí)現(xiàn)代碼
- CodeFirst從零開始搭建Asp.Net Core2.0網(wǎng)站
- 詳解ASP.NET Core 網(wǎng)站在Docker中運(yùn)行
- ASP.NET網(wǎng)站第一次訪問慢的解決方法
- 如何使用ASP.NET創(chuàng)建網(wǎng)站并設(shè)計(jì)web頁面
相關(guān)文章
使用pdfbox實(shí)現(xiàn)pdf文本提取和合并功能示例
這篇文章主要介紹了使用pdfbox實(shí)現(xiàn)pdf文本提取和合并功能示例,大家參考使用吧2014-01-01Visual Studio 2010 前端開發(fā)工具/擴(kuò)展/插件推薦
這篇文章主要介紹了一組我喜愛的擴(kuò)展和工具能讓Visual Studio在web開發(fā)方面更簡(jiǎn)單,我只是集中在我安裝和使用過的一些工具,如果你還有其它好用的的話,請(qǐng)?jiān)谶@里留言。2016-06-06Visual Studio 2017通過SSH調(diào)試Linux上.NET Core
這篇文章主要為大家詳細(xì)介紹了Visual Studio 2017通過SSH調(diào)試Linux 上.NET Core的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03.NET使用結(jié)構(gòu)體替代類提升性能優(yōu)化的技巧
這篇文章主要介紹了.NET使用結(jié)構(gòu)體替代類提升性能優(yōu)化的技巧,使用結(jié)構(gòu)體替代類有什么好處呢?在什么樣的場(chǎng)景需要使用結(jié)構(gòu)體來替代類呢?今天的文章為大家一一解答,需要的朋友可以參考下2022-05-05C#反射技術(shù)的簡(jiǎn)單操作(讀取和設(shè)置類的屬性)
反射的作用想必大家都知道了吧,少量屬性的自動(dòng)化操作手動(dòng)添加幾下當(dāng)然是沒有問題的,但是屬性數(shù)量較多的時(shí)候敲起這些繁鎖的代碼可以困了,再說對(duì)擴(kuò)展和維護(hù)性造成很多的不遍,以下代碼中如不能直接使用請(qǐng)?zhí)砑觰sing System.Text;的引用。2011-01-01ASP.NET?MVC開發(fā)接入微信公共平臺(tái)
這篇文章主要為大家介紹了微信平臺(tái)開發(fā)ASP.NET?MVC接入微信公共平臺(tái)實(shí)現(xiàn)過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04