aspnet core2中使用csp內容安全策略

aspnet core2中使用csp內容安全策略


問題:aspnet core2如何使用csp防止xss的攻擊javascript

方法:css

public void ConfigureServices(
            IServiceCollection services)
        {
            services.AddMvc();
        }
 
        public void Configure(
            IApplicationBuilder app, 
            IHostingEnvironment env)
        {
            app.UseDeveloperExceptionPage();
 
            app.Use(async (context, next) =>
            {
                context.Response.Headers.Add(
                    "Content-Security-Policy",
                    "script-src 'self'; " +
                    "style-src 'self'; " +
                    "img-src 'self'");
 
                await next();
            });
 
            app.UseStaticFiles();
            app.UseMvcWithDefaultRoute();
        }
    }

_Layout頁面 (普通html頁面也能夠,不必定是mvc)添加以下代碼html

<!DOCTYPE html>
 
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>@ViewBag.Title</title>
 
    <link rel="stylesheet" href="~/css/site.css" />
    <link rel="stylesheet" 
          href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.5/css/bootstrap.min.css" />
</head>
<body>
    <img src="~/img/site-banner.jpg" />
    <img src="https://media-www-asp.azureedge.net/media/5245130/home-hero-2.png" />
 
    <div>
        @RenderBody()
    </div>
 
    <script src="~/js/site.js"></script>
    <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.2.1.min.js"></script>
</body>
</html>

按f12調試 ,會看到相似下面的信息,bootstrap.min.css文件被瀏覽器拒絕了。java

bootstrap.min.css blocked:cspjquery


什麼是 csp

這裏也有介紹 https://www.zhihu.com/question/21979782
CSP指的是內容安全策略,爲了緩解很大一部分潛在的跨站腳本問題,瀏覽器的擴展程序系統引入了內容安全策略(CSP)的通常概念。這將引入一些至關嚴格的策略,會使擴展程序在默認狀況下更加安全,開發者能夠建立並強制應用一些規則,管理網站容許加載的內容。linux

看上面的代碼就知道了,就是在header里加了Content-Security-Policy的安全策略。git

來源的控制有哪些策略呢

1 : 容許全部
2 ‘self’: 網站自身,記得有單引號
3 Host: 服務器。能夠設置其餘的服務器地址,ip和域名均可以,如http://
.foo.com cdn的資源能夠這麼作。
4 ‘unsafe-line’: 不安全的行內代碼。如github

<a href="#" onclick="al()">保存</a>

5 ‘nonce-[base64-value]’:allow inline scripts with a specific nonce (number used once). The nonce should be encrypted and unique for every HTTP request/response .沒用過。ajax

能控制哪些內容呢?

script-src: JavaScript 腳本
style-src: css樣式表
img-src: 圖片地址
connect-src: ajax調用請求
font-src: 字體
object-src: 之類的元素
media-src: 音視頻
form-action: form中的action
default-src: 加載內容的默認策略
更詳細的看這裏https://www.zhihu.com/question/21979782

以上內容能夠用中間件實現。

原文:https://tahirnaushad.com/2017/09/12/using-csp-header-in-asp-net-core-2-0/

參考 https://www.zhihu.com/question/21979782

https://linux.cn/article-5848-1.html

https://yq.aliyun.com/articles/87712?utm_campaign=wenzhang&utm_medium=article&utm_source=QQ-qun&201767&utm_content=m_22674

原文做者實現了的中間件源碼
GitHub: https://github.com/TahirNaushad/Fiver.Security.BrowserHeaders

源碼中除了實現了csp,還有實現HTTP Strict Transport Security(從http跳轉到https)的代碼

posted @ 2017-11-05 00:00 過錯 閱讀( ...) 評論( ...) 編輯 收藏
bootstrap

相關文章
相關標籤/搜索