2010-06-28 34 views
2

我工作的应用程序生成PDF文档并在浏览器窗口中呈现它们。文档中的某些数据可能被认为是敏感的,因此我们正在探索如何防止浏览器缓存文档内容。我们使用下面的Java代码,防止缓存在Firefox,但在IE 8不工作:停止Internet Explorer(v7,8)停止高速缓存PDF文件的任何可靠方法?

response.setHeader("Expires", "0"); 
response.setHeader("Pragma", "private"); 
response.setHeader("Cache-Control", "max-age=0, no-store"); 
response.setHeader("Content-disposition", "inline; filename= \"" + filename + "\""); 
response.setContentLength(fbytes.length); 

我想知道如果任何人有任何运气处理头,以阻止IE缓存?提前致谢。

+0

您使用的是https吗? – Gabe 2010-06-28 17:18:09

+0

你知道吗,我不能相信我忘了提及这一点!是的,我正在使用HTTPS。 – 2010-06-28 19:03:54

回答

3

当你说“缓存”的意思是“将文档写入磁盘”?

不,没有好的方法来做到这一点,因为Adobe PDF阅读器依靠缓存文件来显示文档。

通常,在HTTPS文档中指定“无存储”可以防止其在IE中下载,如下所述:http://blogs.msdn.com/b/ieinternals/archive/2009/10/03/internet-explorer-cannot-download-over-https-when-no-cache.aspx但是,由于此文档正在由Adobe MIME处理程序处理,因此您似乎没有遇到这个问题。

真正的问题是“你的威胁模型是什么?”一个能够阅读用户TIF的坏人通常有能力做其他不好的事情(例如安装恶意软件),所以试图将文档保存在磁盘上是一个相当无用的练习。这是因为现代操作系统使用虚拟内存(将内存页面写入交换文件中的硬盘),这意味着一个无限制读取硬盘的坏人可以恢复内存内容。

+1

谢谢埃里克。你对我的问题的理解是现货。我发现使用无存储标头可以在IE6和Firefox中使用,但不能在IE7或8中使用。关于威胁模型,所有帐户都达成一致。这与光学相关,因为它是关于真正的安全。感谢您花一点时间来澄清这一点。 – 2010-07-02 14:57:16

0

保持安全性,因为链接存在于Intranet中。这怎么处理IE6/IE8。

response.setHeader("Expires", "0"); 
response.setHeader("Pragma", "private"); 
response.setHeader("Cache-Control", "max-age=0, no-store"); 
response.setHeader("Content-disposition", "inline; filename= \"" + filename + "\""); 
response.setContentLength(fbytes.length); 

这段代码不起作用。

0

我发现的唯一可靠的方法是引用PDF与唯一的命令行参数。我们使用guid(如果在SQL中,你可以从它得到它:SELECT newid())。只需修改请求页面,呼吁 的PDF格式,如果这是一个链接考虑执行下列操作: 语法: <a href="{PDFfilename}?guid={UniqueID}">link</a>

例子: <a href="mypdf.pdf?guid=FA7848FB-414E-4C17-95E8-1921B333E1A0">Link</a>

这需要你回蓝请求的页面每次有是对pdf的修改。

+0

问题不在于需要重新生成pdf。根据提问者,它不应该被放在首位。 因为它可能包含“有感知力”的数据。 – Willy 2012-10-29 11:57:04