ASP。网络核心中怎么利用Csp标头对抗Xss攻击

  介绍

这篇文章给大家分享的是有关ASP。网络核心中怎么利用Csp标头对抗Xss攻击的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

内容安全策略(Csp)是一个增加的安全层,可帮助检测和缓解某些类型的攻击,包括跨站点脚本(Xss)和数据注入攻击。这些攻击用于从数据窃取到站点破坏或恶意软件分发的所有内容(深入Csp)

简而言之,Csp是网页控制允许加载哪些资源的一种方式,例如,页面可以显式声明允许从中加载JavaScript、CSS和图像资源。这有助于防止跨站点脚本(Xss)攻击等问题。

它也可用于限制协议,例如限制通过HTTPS加载的内容.CSP通过Content-Security-Policy HTTP响应中的标头实现。

启用Csp,您需要配置Web服务器以返回Content-Security-Policy HTTP标头。那么在这篇文章中,我们将要尝试将Csp添加到ASP。网络核心应用程序中。

app.Use (async  (ctx,,下一个),=比;   {才能   ctx.Response.Headers.Add才能(“Content-Security-Policy",   ,,,“default-src  & # 39;自我# 39;;,report-uri /cspreport");   await 才能;next ();   });才能

在家里/索引中引入cdn文件,然后我们启动项目,看看会发生什么!

 ASP。网络核心中怎么利用Csp标头对抗Xss攻击

运行并观察错误。加载页面时,浏览器拒绝从远程源加载。

 ASP。净核心中怎么利用Csp标头对抗Xss攻击”>,</p> <p>所以我们可以组织Csp来控制我们的白名单,在配置当中需要填写来源以及内容,以下是常用限制的选项。</p> <p> </p> <blockquote> <p> *:允许任何网址。<br/> '自我# 39;:允许所提供页面的来源。请注意,单引号是必需的。<br/> '没有# 39;:不允许任何来源。请注意,单引号是必需的。<br/>主持人:允许指定的互联网主机(按名称或IP地址)。通配符(星号字符)可用于包括所有子域,例如http://* .foo.com <br/> ' unsafe-line& # 39;:允许内联脚本<br/> ' nonce - [base64-value] & # 39;:允许具有特定nonce的内联脚本(使用一次的数字)。对于每个HTTP请求/响应,应该对强奸犯进行加密和唯一。<br/> </p> </引用> <p>,指令:</p> <blockquote> <p> script-src:定义有效的JavaScript源<br/> style-src:定义样式表的有效来源<br/> img src:定义有效的图像源<br/> connect-src:定义可以进行AJAX调用的有效源<br/> font-src:定义有效的字体来源<br/>对象src:定义& lt; object>, & lt; embed>和& lt; applet>元素的有效源<br/> media-src:定义有效的音频和视频源<br/>表单动作:定义可用作HTML & lt; form>操作的有效源。<br/> default-src:指定加载内容的默认策略<br/> </p> </引用> <p>我们可以在可重用的中间件中封装构建和添加Csp头。以下是一个让您入门的示例。你可以根据需要扩展它。首先,创建一个用于保存源的类。</p> <pre类= public  class  CspOptions   ,{   public 才能;List< string>, Defaults {组,得到,,,},=,new  List ();   public 才能;List< string>, Scripts {组,得到,,,},=,new  List ();   public 才能;List< string>, Styles {组,得到,,,},=,new  List ();   public 才能;List< string>, Images {组,得到,,,},=,new  List ();   public 才能;List< string>, Fonts {组,得到,,,},=,new  List ();   public 才能;List< string>, Media {组,得到,,,},=,new  List ();   以前,}

开发一个中间件一定是需要一个构造器的,这将用于。net核心的注入到运行环境中。

public  sealed  class  CspOptionsBuilder    {大敌;   private 才能readonly  CspOptions  options =, new  CspOptions (),,   ,,   internal 才能;CspOptionsBuilder (), {,},   ,   public 才能CspDirectiveBuilder  Defaults {组,得到,,,},=,new  CspDirectiveBuilder (),,   public 才能CspDirectiveBuilder  Scripts {组,得到,,,},=,new  CspDirectiveBuilder (),,   public 才能CspDirectiveBuilder  Styles {组,得到,,,},=,new  CspDirectiveBuilder (),,   public 才能CspDirectiveBuilder  Images {组,得到,,,},=,new  CspDirectiveBuilder (),,   public 才能CspDirectiveBuilder  Fonts {组,得到,,,},=,new  CspDirectiveBuilder (),,   public 才能CspDirectiveBuilder  Media {组,得到,,,},=,new  CspDirectiveBuilder (),,   ,   internal 才能;CspOptions 建立(),   ,{大敌;   ,,this.options.Defaults =, this.Defaults.Sources;,   ,,this.options.Scripts =, this.Scripts.Sources;,   ,,this.options.Styles =, this.Styles.Sources;,   ,,this.options.Images =, this.Images.Sources;,   ,,this.options.Fonts =, this.Fonts.Sources;,   ,,this.options.Media =, this.Media.Sources;,   ,,return  this.options,   ,,},   }大敌;   ,   ,public  sealed  class  CspDirectiveBuilder    {大敌;   internal 才能;CspDirectiveBuilder (), {,},   ,   internal 才能;List< string>, Sources {组,得到,,,},=,new  List

ASP。网络核心中怎么利用Csp标头对抗Xss攻击