【问题标题】:Is there any way to "sanitize" PDFs in C#?有没有办法在 C# 中“清理”PDF?
【发布时间】:2016-03-24 19:13:00
【问题描述】:

有哪些方法可以尝试删除 PDF 中的病毒等?代码是如何隐藏在 PDF 中的?我可以至少删除大部分吗?我希望仍然存在漏洞,但它是否有助于删除如下元数据?

Stream stream = new MemoryStream(_fileBytes);
PdfDocument document = new PdfDocument();
document.Save(stream, true);
document.Info.Author = "";
document.Info.CreationDate = new DateTime();
document.Info.Creator = "";
document.Info.Elements = new PdfDictionary.DictionaryElements();
document.Info.Internals = new PdfSharp.Pdf.Advanced.PdfObjectInternals();
document.Info.Keywords = "";

我担心的是,如果注册用户上传了错误的 PDF,那么当其他用户从服务器下载它时,他们就会被感染。除了尝试清理 PDF 之外,还有更好的方法吗?

【问题讨论】:

  • 在您的服务器上安装病毒扫描软件并扫描所有上传的文件。
  • 为什么这被否决了!在至少完成一些检查之后,病毒扫描肯定是最后的措施吗?
  • 不扫描病毒是首要措施。它应该是在文件上传时完成的实时扫描。为了非常安全,在扫描完成之前不要下载文件。您可以使用 clamav 工具或商业工具来完成此操作
  • “在扫描完成之前不允许下载文件”->您是否建议他们可以在文档在内存中保存到磁盘之前进行扫描?

标签: c# pdfsharp


【解决方案1】:

您应该做的一件事是在您的服务器上安装防病毒软件并让它扫描上传的文件,正如 dman2306 建议的那样。

除了安全必要性之外,您还可以从 pdf 文件中删除理论上可能成为攻击媒介的元素。典型的例子是 pdf 文件允许嵌入和执行 javscript。此功能已被多种类型的恶意软件利用。

因此,您可以从文档中删除包含 javascript 的 PdfObjects。如果我记得,注释还允许执行程序等操作,因此您也可以删除它们。

您可能会想到许多不同类型的名称可能成为攻击的潜在载体。我想到的一些是自动执行对象,就像我说的,javascript 对象。除了建议的病毒扫描之外,删除这些元素应该有助于将风险降至最低。

【讨论】:

  • 同意。但请记住,最常见的 pdf“病毒”不是病毒。它们是利用 acrobat reader 中的错误的格​​式错误的 PDF。病毒扫描程序是您最好的防御措施,并建议用户保持 acrobat 最新
  • 当然,我将再次声明,除了病毒扫描之外,我还建议删除 PDF 的潜在危险部分。病毒扫描是迄今为止更重要的部分。
【解决方案2】:

我去过一些他们对这种场景有奇怪要求的地方。他们所做的是将其作为电子邮件的附件,然后将其发送到某个邮箱。 Exchange 服务器正在对附件进行病毒检查,因此这是完成该任务的最简单经济有效的方法。然后您以编程方式获取成功的电子邮件并下载它。

并不是说这是最好的解决方案,因为它很丑,但是它已经成功用于完成PDF病毒检查。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-10
    相关资源
    最近更新 更多