• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > asp.net core下给网站做安全设置的方法详解

asp.net core下给网站做安全设置的方法详解

作者:又见阿郎 字体:[增加 减小] 来源:互联网 时间:2018-08-20

又见阿郎 通过本文主要向大家介绍了asp.net,core,asp.net,core,教程,asp.net,core,2.0教程等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

前言

本文主要介绍了关于asp.net core给网站做安全设置的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧

设置方法如下

首先,我们来看下stack overflow网站的请求头文件:


可以看到一些我们熟悉或是陌生的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()
);

然后我们浏览一下网页,就可以在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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Asp.net SignalR 应用并实现群聊功能 开源代码
  • asp.net动态更新
  • asp.net利用母版制作页脚效果
  • Asp.Net服务器发送HTTP标头后无法设置内容类型的问题解决
  • 使用asp.net mvc,boostrap及knockout.js开发微信自定义菜单编辑工具(推荐)
  • 详解ASP.NET MVC 常用扩展点:过滤器、模型绑定
  • ASP.NET Core发送邮件的方法
  • 在ASP.NET Core 中发送邮件的实现方法(必看篇)
  • ASP.NET MVC从视图传参到控制器的几种形式
  • Asp.net core WebApi 使用Swagger生成帮助页实例

相关文章

  • 2017-05-11IIS故障(Connections_Refused)问题分析及处理
  • 2017-05-11asp.net使用DataTable构造Json字符串的方法
  • 2017-05-11The remote procedure call failed and did not execute的解决办法
  • 2017-05-11asp.net DataTable相关操作集锦(筛选,取前N条数据,去重复行,获取指定列数据等)
  • 2017-05-11gridview和checkboxlist的嵌套相关应用
  • 2017-05-11ASP.NET中的几种弹出框提示基本实现方法
  • 2017-05-11asp.net(C#) Access 数据操作类
  • 2017-05-11asp.net中Datalist使用数字分页的实现方法
  • 2017-05-11ASP.NET中XML转JSON的方法实例
  • 2017-05-11asp.net 2.0的文件上传(突破上传限制4M)

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • asp.net mvc中Forms身份验证身份验证流程
    • 页面编码codepage=936和65001的区别
    • asp.net下实现支持文件分块多点异步上传的 Web Services
    • DropDownList根据下拉项的Text文本序号排序
    • asp.net中使用cookie传递参数的方法
    • asp.net+ajaxfileupload.js 实现文件异步上传代码分享
    • 在.NET中取得代码行数的方法
    • dz asp.net论坛中函数--根据Url获得源文件内容
    • asp.net 按指定模板导出word,pdf实例代码
    • asp.net JSONHelper JSON帮助类

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有