asp.net core下給網(wǎng)站做安全設置的方法詳解
前言
本文主要介紹了關于asp.net core給網(wǎng)站做安全設置的相關內(nèi)容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧
設置方法如下
首先,我們來看下stack overflow網(wǎng)站的請求頭文件:

可以看到一些我們熟悉或是陌生的HTTP頭部文件字段。
在這里我們在對HTTP輸入流的頭部文件中,做一些基本的防護。首先要明確,既然我們是對HTTP頭部做處理,那么就需要在Startup.cs類的
Configuration方法中做處理,因為這里就是處理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接口做一個中間件的擴展方法:
public static class MiddlewareExtensions
{
public static IApplicationBuilder UseSecurityHeadersMiddleware(this IApplicationBuilder app, SecurityHeadersBuilder builder)
{
SecurityHeaderPolicy policy = builder.Build();
return app.UseMiddleware<SecurityHeadersMiddleware>(policy);
}
}
封裝好相關的安全類:
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
還有一個就是CSRF的防護,如果之前你用過ASP.NET MVC,在最基本的MVC模板中,可能你會留意到已有的cshtml頁面中的form表單有這么一句:
@Html.AntiForgeryToken()
這就是微軟在MVC框架中為我們提供的防護CSRF的方法。我們在表單中直接使用上面那句代碼就可以了,然后在表單提交的Action方法中:
[ValidateAntiForgeryToken]
[HttpPost]
public IActionResult AntiForm(string message)
{
return Content(message);
}
使用[ValidateAntiForgeryToken]屬性,來驗證CSRF。
參考鏈接:
- How to add security headers in ASP.NET Core using custom middleware(如何使用自定義中間件在ASP.NET Core中添加安全標頭)
- 初探CSRF在ASP.NET Core中的處理方式
代碼地址:
https://github.com/RyanOvO/aspnetcore-fileup-demo
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
- .Net Core3 用Windows 桌面應用開發(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)站支付實現(xiàn)代碼
- CodeFirst從零開始搭建Asp.Net Core2.0網(wǎng)站
- 詳解ASP.NET Core 網(wǎng)站在Docker中運行
- ASP.NET網(wǎng)站第一次訪問慢的解決方法
- 如何使用ASP.NET創(chuàng)建網(wǎng)站并設計web頁面
相關文章
使用pdfbox實現(xiàn)pdf文本提取和合并功能示例
這篇文章主要介紹了使用pdfbox實現(xiàn)pdf文本提取和合并功能示例,大家參考使用吧2014-01-01
Visual Studio 2010 前端開發(fā)工具/擴展/插件推薦
這篇文章主要介紹了一組我喜愛的擴展和工具能讓Visual Studio在web開發(fā)方面更簡單,我只是集中在我安裝和使用過的一些工具,如果你還有其它好用的的話,請在這里留言。2016-06-06
Visual Studio 2017通過SSH調(diào)試Linux上.NET Core
這篇文章主要為大家詳細介紹了Visual Studio 2017通過SSH調(diào)試Linux 上.NET Core的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03
.NET使用結(jié)構體替代類提升性能優(yōu)化的技巧
這篇文章主要介紹了.NET使用結(jié)構體替代類提升性能優(yōu)化的技巧,使用結(jié)構體替代類有什么好處呢?在什么樣的場景需要使用結(jié)構體來替代類呢?今天的文章為大家一一解答,需要的朋友可以參考下2022-05-05

