发现缓存SSL页面,捆绑和缩小
我们有一个MVC应用程序,使用IBM应用程序扫描由第三方公司扫描安全问题。 问题是,例如,由于捆绑和缩小导致出现多个问题
整个观点是捆绑和缩小会缓存你的样式表和JavaScript文件。 不幸的是,如果不解决这些问题,我们不会签字。 有关我们如何克服这个问题的想法?
不幸的是,客户端不会接受他的CSS和JavaScript文件被缓存的事实,并要求禁用所有缓存,从而解决了所有问题。
为了达到这个目的,我在Global.asax
文件中添加了以下方法,以禁止对服务器发出的每个请求进行缓存。
protected void Application_BeginRequest()
{
HttpContext.Current.Response.Cache.SetAllowResponseInBrowserHistory(false);
HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
HttpContext.Current.Response.Cache.SetNoStore();
Response.Cache.SetExpires(DateTime.Now);
Response.Cache.SetValidUntilExpires(true);
}
这将在响应标题中添加Cache-Control: no-store
和Pragma: no-cache
。 以下是使用Fidler的标题图片
请注意,捆绑和缩小仍然使用,但文件不会被缓存。 请谨慎使用此路线,因为上述缓存将针对整个应用程序关闭。
您可以查看包变换。 这不是一个复杂的过程,并且不需要为整个应用程序禁用浏览器缓存。 缺点是它不会给你太多的响应控制,尽管它可以让你选择禁用浏览器缓存。
请注意,使用这种方法,您只能将缓存控制设置为no-cache
并且不能将其设置为no-store
。 所以我不确定你的客户是否会接受! (如果这没有帮助,可能值得关注捆绑转换的新功能,因为他们打算根据此SO响应提供对缓存标头的更多控制)
如果您认为这足够了,那么首先创建一个实现IBundleTransform
的新变换DisableCacheOverHttpsTransform
。 该转换将检查当前请求是否通过安全连接,在这种情况下,它将禁用该软件包的浏览器缓存:
public class DisableCacheOverHttpsTransform : IBundleTransform
{
public void Process(BundleContext context, BundleResponse response)
{
if (context.HttpContext.Request.IsSecureConnection)
{
//disable cache on https
response.Cacheability = HttpCacheability.NoCache;
}
}
}
现在,您只需确保您的脚本和CSS捆绑包使用此转换。 您可以使用此代码将此转换添加到所有包(这应该在RegisterBundles(BundleCollection bundles)
方法的末尾):
public static void RegisterBundles(BundleCollection bundles)
{
...
//Discomment to try bundling in debug
//BundleTable.EnableOptimizations = true;
var transform = new DisableCacheOverHttpsTransform();
foreach (var bundle in bundles)
{
bundle.Transforms.Add(transform);
}
}
通过这些更改,当您的应用程序通过https运行时,脚本和css捆绑包的响应将包括标头Cache-Control:no-cache
和Pragma:no-cache
。
希望能帮助到你!
我使用了类似的方法。 但是,这些细微差别允许客户端和服务器缓存,同时停止任何代理缓存。 这似乎是AppScan和Developer的中间立场。
Response.Cache.SetCacheability(HttpCacheability.ServerAndPrivate);
Response.Cache.SetRevalidation(HttpCacheRevalidation.ProxyCaches);
Response.Cache.SetExpires(DateTime.Now);
Response.Cache.SetNoStore();
Response.Cache.SetMaxAge(new TimeSpan(0, 0, 30));
Response.AppendHeader("Pragma", "no-cache");
链接地址: http://www.djcxy.com/p/22111.html
上一篇: Cacheable SSL page found, Bundling and Minification
下一篇: Text input box not accepting input in modal from Angular UI Bootstrap