LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

SecurityHeaders:为.Net网站添加安全标头,让Web更加安全、避免攻击!

admin
2024年8月30日 23:50 本文热度 566
网站的安全对于任何一家公司都是非常重要的。

为了保证Web安全,其中Http安全标头就是非常重要一个的措施。设定正确的安全头可以增强网站的安全性,因为它们可以帮助防止各种网络攻击,如跨站脚本(XSS)、点击劫持(Clickjacking)和内容类型嗅探(Content Type Sniffing)等。
下面推荐一个开源项目,可以让我们轻松地添加安全相关的HTTP头到网站中。
 

01

项目简介

NetEscapades.AspNetCore.SecurityHeaders 是一个轻便的的 ASP.NET Core 开源库,旨在方便开发者向 ASP.NET Core 网站添加安全头(Security Headers)。
该库提供了一套默认的安全头,都是非常常见的,这些头被广泛应用于提高网站的安全性。

02

核心功能与特点
1、提供默认安全头
X-Content-Type-Options: nosniff:防止浏览器尝试“嗅探”响应的内容类型。
Strict-Transport-Security:max-age=31536000; includeSubDomains(仅HTTPS响应):强制浏览器通过HTTPS与服务器建立连接。
X-Frame-Options: Deny(仅“document”响应):防止网站被嵌入到iframe中。
X-XSS-Protection: 1; mode=block(仅“document”响应):启用浏览器的XSS过滤器。
Referrer-Policy: strict-origin-when-cross-origin:控制HTTP请求的Referer头部。
Content-Security-Policy(CSP):定义哪些动态资源是允许的,帮助防止XSS攻击等。
2、自定义安全头:开发者可以根据需要自定义安全头。
3、内容安全策略(CSP):精细控制哪些外部资源(如脚本、样式表、图片等)可以被加载到网页上。
4、权限策略(Permissions Policy):控制的是浏览器特性和API的使用,而不是资源加载。通过Permissions Policy,开发者可以确保敏感API(如地理位置、摄像头等)不会被滥用。
5、Nonce和哈希:对于需要内联脚本或样式的情况,CSP支持使用Nonce(一次性数字)或哈希值来允许这些内联内容。
6、灵活性:可以根据需要启用或禁用特定的安全头,或者调整它们的配置,以满足不同的安全需求。
7、集成简单:该库通过中间件的形式集成到ASP.NET Core应用中,只需一行代码就可以轻松集成。

03

使用方法

1、默认安全头

app.UseSecurityHeaders();
2、自定义安全头
// 创建一个新的HeaderPolicyCollection实例,用于配置安全头部  var policyCollection = new HeaderPolicyCollection()      // 添加X-Frame-Options头部,设置为DENY,防止网站被嵌入到iframe中      .AddFrameOptionsDeny()      // 添加X-XSS-Protection头部,设置为BLOCK,尝试阻止跨站脚本攻击      .AddXssProtectionBlock()      // 添加X-Content-Type-Options头部,设置为nosniff,防止浏览器尝试基于内容“嗅探”响应的内容类型      .AddContentTypeOptionsNoSniff()      // 添加Strict-Transport-Security头部,设置max-age为一年(秒为单位),并包含所有子域      // 这要求浏览器仅通过HTTPS与服务器通信      .AddStrictTransportSecurityMaxAgeIncludeSubDomains(maxAgeInSeconds: 60 * 60 * 24 * 365) // maxage = one year in seconds      // 添加Referrer-Policy头部,设置为strict-origin-when-cross-origin      // 这控制了在跨源请求中是否发送Referer头部,以及发送多少信息      .AddReferrerPolicyStrictOriginWhenCrossOrigin()      // 移除Server头部,以减少信息泄露      .RemoveServerHeader()      // 添加Content-Security-Policy头部,配置详细的资源加载策略      .AddContentSecurityPolicy(builder =>      {          // 禁止从任何源加载对象(如插件)          builder.AddObjectSrc().None();          // 仅允许表单操作(如提交)到同一源          builder.AddFormAction().Self();          // 禁止将当前页面作为frame的祖先          builder.AddFrameAncestors().None();      })      // 添加Cross-Origin-Opener-Policy头部,设置为same-origin      // 这控制了哪些文档可以通过window.open(), window.createPopup(), 或类似的方法打开      .AddCrossOriginOpenerPolicy(builder =>      {          builder.SameOrigin();      })      // 添加Cross-Origin-Embedder-Policy头部,设置为require-corp      // 这要求嵌入的文档通过COEP报头声明它们是COOP兼容的      .AddCrossOriginEmbedderPolicy(builder =>      {          builder.RequireCorp();      })      // 添加Cross-Origin-Resource-Policy头部,设置为same-origin      // 这控制了哪些源可以加载资源(如图片、脚本等)      .AddCrossOriginResourcePolicy(builder =>      {          builder.SameOrigin();      })      // 添加自定义的HTTP头部      .AddCustomHeader("X-My-Test-Header", "Header value");  
// 使用配置好的安全头部策略  app.UseSecurityHeaders(policyCollection);

3、移除服务器响应标头

var host = new WebHostBuilder()    .UseKestrel(options => options.AddServerHeader = false)

4、内容安全策略

// 创建一个HeaderPolicyCollection实例,用于定义和管理HTTP响应的安全头  var policyCollection = new HeaderPolicyCollection()      .AddContentSecurityPolicy(builder =>      {          // 添加策略以自动将不安全的请求(如HTTP)升级到HTTPS          builder.AddUpgradeInsecureRequests(); // upgrade-insecure-requests  
       // 阻止所有混合内容(HTTPS页面中的HTTP资源)          builder.AddBlockAllMixedContent(); // block-all-mixed-content  
       // 指定用于接收CSP违规报告的URI          builder.AddReportUri() // report-uri: https://report-uri.com              .To("https://report-uri.com");  
       // 定义默认的源策略,仅允许加载当前来源和http://testUrl.com的资源          builder.AddDefaultSrc() // default-src 'self' http://testUrl.com              .Self() // 仅允许加载来自相同源的资源              .From("http://testUrl.com"); // 允许加载来自http://testUrl.com的资源  
       // 定义允许连接的源          builder.AddConnectSrc() // connect-src 'self' http://testUrl.com              .Self() // 允许与当前源建立连接              .From("http://testUrl.com"); // 允许与http://testUrl.com建立连接  
       // 定义允许加载的字体源          builder.AddFontSrc() // font-src 'self'              .Self(); // 仅允许加载来自相同源的字体  
       // 禁止通过<object>、<embed>或<applet>标签加载资源          builder.AddObjectSrc() // object-src 'none'              .None(); // 禁用<object>、<embed>或<applet>  
       // 定义表单动作源,即限制哪些源可以处理表单提交          builder.AddFormAction() // form-action 'self'              .Self(); // 仅允许表单提交到当前源  
       // 定义图片资源只能来自HTTPS源          builder.AddImgSrc() // img-src https:              .OverHttps(); // 仅允许HTTPS协议的图片资源  
       // 定义脚本资源策略,允许加载来自相同源的脚本,允许内联脚本和eval,并报告样本          builder.AddScriptSrc() // script-src 'self' 'unsafe-inline' 'unsafe-eval' 'report-sample'              .Self() // 允许加载来自相同源的脚本              .UnsafeInline() // 允许内联脚本              .UnsafeEval() // 允许使用eval()等函数              .ReportSample(); // 报告脚本样本以供审查  
       // 定义样式资源策略,允许加载来自相同源的样式,并启用严格动态检查          builder.AddStyleSrc() // style-src 'self' 'strict-dynamic'              .Self() // 允许加载来自相同源的样式              .StrictDynamic(); // 启用严格动态检查  
       // 定义媒体资源只能来自HTTPS源          builder.AddMediaSrc() // media-src https:              .OverHttps(); // 仅允许HTTPS协议的媒体资源  
       // 定义可以嵌入当前页面的框架的源,此处禁用所有框架嵌入          builder.AddFrameAncestors() // frame-ancestors 'none'              .None(); // 禁止任何源嵌入当前页面  
       // 定义基准URI,限制页面内基础URI(如<base>标签)的来源          builder.AddBaseUri() // base-uri 'self'              .Self(); // 仅允许基础URI与当前源相同  
       // 定义可以嵌入<frame>、<iframe>、<object>、<embed>或<applet>的源          builder.AddFrameSource() // frame-src http://testUrl.com              .From("http://testUrl.com"); // 允许嵌入来自http://testUrl.com的框架  
       // 添加自定义指令,例如限制允许的插件类型          builder.AddCustomDirective("plugin-types", "application/x-shockwave-flash"); // 限制只允许Flash插件  
   })      // 添加自定义HTTP头      .AddCustomHeader("X-My-Test-Header", "Header value");  
// 使用定义好的安全头策略  app.UseSecurityHeaders(policyCollection);

5、权限策略

// 创建一个HeaderPolicyCollection实例,用于存储和配置各种安全策略  var policyCollection = new HeaderPolicyCollection()      // 添加Permissions Policy(功能策略),用于控制网页可以使用哪些Web功能      .AddPermissionsPolicy(builder =>      {          // 允许页面从自身源('self')或指定的URL(http://testUrl.com)访问加速度计          builder.AddAccelerometer()              .Self()              .For("http://testUrl.com");  
       // 允许页面从自身源访问环境光传感器          builder.AddAmbientLightSensor()              .Self()              .For("http://testUrl.com");  
       // 允许页面自动播放媒体内容,仅从自身源          builder.AddAutoplay()              .Self();  
       // 禁止页面访问摄像头          builder.AddCamera()              .None();  
       // 允许页面从自身源加载加密媒体          builder.AddEncryptedMedia()              .Self();  
       // 允许页面全屏模式,对所有源          builder.AddFullscreen()              .All();  
       // 禁止页面访问地理位置          builder.AddGeolocation()              .None();  
       // 禁止页面访问陀螺仪          builder.AddGyroscope()              .None();  
       // 禁止页面访问磁力计          builder.AddMagnetometer()              .None();  
       // 禁止页面访问麦克风          builder.AddMicrophone()              .None();  
       // 禁止页面访问MIDI设备          builder.AddMidi()              .None();  
       // 禁止页面执行支付请求          builder.AddPayment()              .None();  
       // 禁止页面使用画中画模式          builder.AddPictureInPicture()              .None();  
       // 禁止页面访问扬声器          builder.AddSpeaker()              .None();  
       // 禁止页面执行同步XHR请求          builder.AddSyncXHR()              .None();  
       // 禁止页面访问USB设备          builder.AddUsb()              .None();  
       // 禁止页面访问VR设备          builder.AddVR()              .None();  
       // 添加自定义功能策略,例如限制Flash插件的使用          builder.AddCustomFeature("plugin-types", "application/x-shockwave-flash");  
       // 添加自定义的iframe策略,允许从自身源或指定URL加载iframe          builder.AddCustomFeature("iframe")              .Self()              .For("http://testUrl.com");      });  
// 应用前面定义的安全策略头部到应用程序响应中  app.UseSecurityHeaders(policyCollection);  

 

04

项目地址

https://github.com/andrewlock/NetEscapades.AspNetCore.SecurityHeaders

- End -


该文章在 2024/9/4 15:00:18 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved