簡體   English   中英

如何在 https 站點的 asp.net Core 2.2 項目中啟用壓縮並避免諸如 CRIME 和 BREACH 之類的問題

[英]How to enable compression in asp.net Core 2.2 project for https site and avoid problems like CRIME and BREACH

我有一個 web 應用程序,它是使用 ASP.NET Core 2.2 MVC 框架頂部的 C# 編寫的。

我的應用程序在每個請求上顯示大量圖像,這使得加載時間變長並增加了帶寬使用。 為了改善頁面加載和帶寬使用,我想使用BrotliGzip格式壓縮 HTTP 響應。

幸運的是,微軟有一個 package ,它使用中間件為我壓縮 HTTP 響應,稱為Microsoft.AspNetCore.ResponseCompression 從 package 官方文檔中,默認情況下禁用安全網站的壓縮。

對動態生成的頁面使用壓縮可能會導致安全問題,例如CRIMEBREACH攻擊。

我的問題是如何在避免安全問題的同時壓縮響應?

這是我如何設置Microsoft.AspNetCore.ResponseCompression package

public void ConfigureServices(IServiceCollection services)
{
    services.AddResponseCompression(options =>
    {
        options.Providers.Add<BrotliCompressionProvider>();
        options.Providers.Add<GzipCompressionProvider>();
        options.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(
        new[] { "image/svg+xml", "image/jpeg" });
        options.EnableForHttps = true;
    });

    ...
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseResponseCompression();
    ...
}

上述設置將為以下 MIMI 類型應用壓縮

  • 應用程序/javascript
  • 應用程序/json
  • 應用程序/xml
  • 文本/CSS
  • 文本/html
  • 文本/json
  • 文本/純文本
  • 文本/xml
  • 圖片/svg+xml
  • 圖片/JPEG

此外,您還可以在發送之前“壓縮”圖像,例如,使用:

    private byte[] CompressImageToQuality(System.Drawing.Image image, int quality)
    {
            EncoderParameter qualityParam = new EncoderParameter(Encoder.Quality, quality); 
            ImageCodecInfo jpegCodec = GetEncoderInfo("image/jpeg");
            EncoderParameters encoderParams = new EncoderParameters(1);
            encoderParams.Param[0] = qualityParam;
            using (var stream = new System.IO.MemoryStream())
            {
                image.Save(stream, jpegCodec, encoderParams);
                return stream.ToArray();
            }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM