asp.net core下給網(wǎng)站做安全設置的方法詳解
前言
本文主要介紹了關于asp.net core給網(wǎng)站做安全設置的相關內容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧
設置方法如下
首先,我們來看下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
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
- .Net Core3 用Windows 桌面應用開發(fā)Asp.Net Core網(wǎng)站
- 如何利用IIS調試ASP.NET網(wǎng)站程序詳解
- 利用IIS調試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頁面
相關文章
Asp.net生成Excel文件并下載(更新:解決使用迅雷下載頁面而不是文件的問題)
Asp.net生成Excel文件并下載(更新:解決使用迅雷下載頁面而不是文件的問題)2012-01-01
詳解ASP.NET Core3.0 配置的Options模式
這篇文章主要介紹了詳解ASP.NET Core3.0 配置的Options模式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-08-08
asp.net中將js的返回值賦給asp.net控件的小例子
要做一個顯示用戶在線停留時間的功能,拖了一個label控件用于顯示時間,而時間是通過js來實現(xiàn)的,現(xiàn)在要把js的返回值賦給label,方法如下:2013-03-03

