Google chrome 为什么谷歌Chrome有时会警告说下载的PDF会危害你的电脑?

Google chrome 为什么谷歌Chrome有时会警告说下载的PDF会危害你的电脑?,google-chrome,Google Chrome,我们有一个网站,可以下载一些PDF。PDF可以是静态的,也可以是动态生成的。它们是通过几种机制(静态URL、回发/重定向/元刷新等)之一下载的。对于某些PDF文件,Chrome会毫无怨言地下载它们。对于其他用户,它会警告用户“此类文件可能会危害您的计算机。是否确实要下载…”并需要额外单击 Chrome使用什么信息来决定是否显示该消息?显然,这不仅仅是因为文件是PDF文件 为了清楚起见,我想在服务器端做一些事情(如果有必要,我们使用IIS/ASP.NET)来防止消息出现。我对让每个用户在浏览器中禁

我们有一个网站,可以下载一些PDF。PDF可以是静态的,也可以是动态生成的。它们是通过几种机制(静态URL、回发/重定向/元刷新等)之一下载的。对于某些PDF文件,Chrome会毫无怨言地下载它们。对于其他用户,它会警告用户“此类文件可能会危害您的计算机。是否确实要下载…”并需要额外单击

Chrome使用什么信息来决定是否显示该消息?显然,这不仅仅是因为文件是PDF文件

为了清楚起见,我想在服务器端做一些事情(如果有必要,我们使用IIS/ASP.NET)来防止消息出现。我对让每个用户在浏览器中禁用消息的解决方案不感兴趣(如果可能的话)


谢谢。

我猜Chrome可能会在动态生成的PDF上警告您,尽管不完全确定


原因是PDF可以被创建为包含可执行代码,当打开它的读卡器中存在漏洞(缓冲区溢出或某些可利用漏洞)时,可以执行这些代码。PDF是由工具生成的,在工具中指定要嵌入的代码等,因此我怀疑是动态生成的文件导致了该消息框。

我不确定,但我的猜测是:

  • 服务器返回错误的文件内容类型(即“test/html”而不是“application/x-pdf”)。一些被黑客攻击的网站试图向您发送屏幕屏蔽(*.scr),告诉您“这是pr0n!立即打开它!”。双击该文件将在您的计算机上安装病毒

  • PDF包含JavaScript,可能是加密的JavaScript


  • 您可以尝试
    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>