C# 如何在用于https站点的asp.net Core 2.2项目中启用压缩,并避免犯罪和违规等问题

C# 如何在用于https站点的asp.net Core 2.2项目中启用压缩,并避免犯罪和违规等问题,c#,asp.net-core,https,compression,image-compression,C#,Asp.net Core,Https,Compression,Image Compression,我有一个在ASP.NET Core 2.2 MVC框架之上使用C编写的web应用程序 我的应用程序在每次请求时都会显示大量图像,这使得加载时间很长,并增加了带宽使用率。为了提高页面负载和带宽使用率,我想使用和格式压缩HTTP响应 幸运的是,微软有一个包,它使用中间件为我压缩HTTP响应。从官方软件包中,默认情况下禁用安全网站的压缩 对动态生成的页面使用压缩可能会导致安全问题,如安全问题和攻击 我的问题是如何在避免安全问题的同时压缩响应 下面是我如何设置包的 上述设置将对以下MIMI类型应用压缩

我有一个在ASP.NET Core 2.2 MVC框架之上使用C编写的web应用程序

我的应用程序在每次请求时都会显示大量图像,这使得加载时间很长,并增加了带宽使用率。为了提高页面负载和带宽使用率,我想使用和格式压缩HTTP响应

幸运的是,微软有一个包,它使用中间件为我压缩HTTP响应。从官方软件包中,默认情况下禁用安全网站的压缩

对动态生成的页面使用压缩可能会导致安全问题,如安全问题和攻击

我的问题是如何在避免安全问题的同时压缩响应

下面是我如何设置包的

上述设置将对以下MIMI类型应用压缩

应用程序/javascript 应用程序/json 应用程序/xml 文本/css 文本/html text/json 文本/纯文本 文本/xml image/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();
            }
    }

从技术上讲是不可能的。漏洞的缓解是在客户端,事实上,一些浏览器Chrome和Firefox,我认为已经对这些攻击进行了缓解。服务器上没有什么可以做的,除了平的外,根本不允许压缩,去除攻击向量。@克里斯普拉特,我想我不清楚这些漏洞。但是,我可以只压缩图像/jpeg MIMI类型而不陷入这个问题吗?嗯,是的,但这对你没有什么好处。JPEG已经是一种压缩格式。这就像是在压缩压缩档案。@ChrisPratt谢谢。我只是想弄清楚这种攻击是否局限于某些MIMI类型。换句话说,如果我压缩除文本/html和图像之外的所有内容会怎么样?不一定。被利用的危险在于内容中暴露的秘密。如果机密在文档中的位置是一个已知数量的简单视图源,那么可以对响应进行梳理,以公开实际的机密值,而不考虑TLS加密。如果你没有秘密,或者你实际上没有以HTML、JS等格式输出它们,那么就不必担心了。
    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();
            }
    }