Google chrome 为什么谷歌Chrome有时会警告说下载的PDF会危害你的电脑?
我们有一个网站,可以下载一些PDF。PDF可以是静态的,也可以是动态生成的。它们是通过几种机制(静态URL、回发/重定向/元刷新等)之一下载的。对于某些PDF文件,Chrome会毫无怨言地下载它们。对于其他用户,它会警告用户“此类文件可能会危害您的计算机。是否确实要下载…”并需要额外单击 Chrome使用什么信息来决定是否显示该消息?显然,这不仅仅是因为文件是PDF文件 为了清楚起见,我想在服务器端做一些事情(如果有必要,我们使用IIS/ASP.NET)来防止消息出现。我对让每个用户在浏览器中禁用消息的解决方案不感兴趣(如果可能的话)Google chrome 为什么谷歌Chrome有时会警告说下载的PDF会危害你的电脑?,google-chrome,Google Chrome,我们有一个网站,可以下载一些PDF。PDF可以是静态的,也可以是动态生成的。它们是通过几种机制(静态URL、回发/重定向/元刷新等)之一下载的。对于某些PDF文件,Chrome会毫无怨言地下载它们。对于其他用户,它会警告用户“此类文件可能会危害您的计算机。是否确实要下载…”并需要额外单击 Chrome使用什么信息来决定是否显示该消息?显然,这不仅仅是因为文件是PDF文件 为了清楚起见,我想在服务器端做一些事情(如果有必要,我们使用IIS/ASP.NET)来防止消息出现。我对让每个用户在浏览器中禁
谢谢。我猜Chrome可能会在动态生成的PDF上警告您,尽管不完全确定
原因是PDF可以被创建为包含可执行代码,当打开它的读卡器中存在漏洞(缓冲区溢出或某些可利用漏洞)时,可以执行这些代码。PDF是由工具生成的,在工具中指定要嵌入的代码等,因此我怀疑是动态生成的文件导致了该消息框。我不确定,但我的猜测是:
您可以尝试
content-disposition:inline
而不是content-disposition:attachment
(请参阅)TL;DR:Chrome有多种客户端启发式方法用于确定文件的安全性。我不相信您可以做任何事情来确保文件被标记为“安全”,但我将指出一些可能有用的事情
大量的逻辑用于确定是否应该显示该提示符。幸运的是,Chromium是开源的,所以您可以仔细阅读它的逻辑。我对下载代码不太熟悉,但最好的开始地点几乎肯定是。这最终会调用和,而这似乎是对mime类型和路径进行检查的地方 基于快速阅读,我认为重定向至少是原因的一部分,因为它们与用户手势没有直接关系。在这种情况下,直接点击下载比点击某个东西“更安全”,并通过各种跟踪器和调度器重定向,因为用户不可能跟随 启发式还考虑到您以前是否访问过特定的URL或域;这也可能对某些显示为“安全”的文件和其他显示为“不安全”的文件产生影响。 我设法摆脱了它:-) 简介
首先测试在控制台中打开PDF。 我也尝试了一个超时,但没有帮助,但它第一次给了我一个消息(这个网站正在尝试下载多个文件。你想允许吗?) 解决方案
对我来说,有效的方法是直接将其附加到单击事件
document.getElementById("expButton").addEventListener( "click", function() { /* exp.. */ } );
我猜纯javascript导出与实际事件的工作方式不一样,也许您可以首先正确地启动一个事件。。我目前不打算尝试
p、 我没有选择(设置/下载)“下载前询问保存每个文件的位置”,但无论哪种方式都可以
只是因为这可能会有帮助:
我使用了ReportViewer,它有一个导出功能。如果我单击它,它工作正常,但我想在单击自定义DIV时导出:
Sys.Application._components.ReportViewerRoot.exportReport(format)
我试图通过控制台调用它,但在视觉上什么也没有发生,除非打开下载页面(Ctrl-J):
然后我尝试了前面提到的超时,但再次出现了不希望出现的行为:
然后我尝试将其附加到实际的点击上,这实际上导致了以下两种不同的情况,我无法解释或将进一步调查
document.getElementById("myDIV").addEventListener(
"click",
function() {
Sys.Application._components.ReportViewerRoot.exportReport("PDF");
}
);
诡异的
所需的
我想知道你是否可以用事件来模拟这个。
我曾尝试制作简单的JS事件,但没有成功。事实上,如果你使用事件,如果你编写一个简单的链接()就会发生这种情况,你可以避免这种检查,你可以自动下载。我在Chrome中遇到了类似的问题 我的网站用一些数据填充了一个pdf文档,并返回该pdf供用户保存 页面将生成的pdf文档作为附件返回:
Response.ContentType = "application/pdf";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + aOutputFileName);
Response.TransmitFile(aFilePath);
Response.End();
pdf下载的链接定义了一个target=“\u blank”属性:
<a href="CreatePdf.aspx" target="_blank">Your pdf</a>
从链接中删除target属性也会删除用户单击所述链接时的警告 好发现。看起来自动打开的行为在Chrome13中已经回归,在Chrome15中会得到修复:这只会影响那些在特定程序中将PDF文件设置为自动打开的用户,但这可能很适合OP的用例。我注意到,产生此消息的一些原因可能是:1)文件名中有空格,2)扩展名大写。在我修复了这两个问题后,警告消失了(对于我的应用程序)。我知道这很旧,但我猜如果有人尝试,他们可以轻松地消除图像模糊,以获得实际的地址和名称。
<a href="CreatePdf.aspx" target="_blank">Your pdf</a>