繁体   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