开发者社区> 问答> 正文

解除用户上传pdf文件的最佳方式

我接受pdf作为用户输入。我知道上传的pdf文件不应该/不需要包含任何可能被恶意使用的内容类型,如JS或AA。例如,这是一个干净的PDF应该具备的(使用Didier Stevens PDFiD进行检查):

    <Keyword Count="59" HexcodeCount="0" Name="obj"/>
    <Keyword Count="59" HexcodeCount="0" Name="endobj"/>
    <Keyword Count="19" HexcodeCount="0" Name="stream"/>
    <Keyword Count="19" HexcodeCount="0" Name="endstream"/>
    <Keyword Count="2" HexcodeCount="0" Name="xref"/>
    <Keyword Count="2" HexcodeCount="0" Name="trailer"/>
    <Keyword Count="2" HexcodeCount="0" Name="startxref"/>
    <Keyword Count="12" HexcodeCount="0" Name="/Page"/>
    <Keyword Count="0" HexcodeCount="0" Name="/Encrypt"/>
    <Keyword Count="0" HexcodeCount="0" Name="/ObjStm"/>
    <Keyword Count="0" HexcodeCount="0" Name="/JS"/>
    <Keyword Count="0" HexcodeCount="0" Name="/JavaScript"/>
    <Keyword Count="0" HexcodeCount="0" Name="/AA"/>
    <Keyword Count="0" HexcodeCount="0" Name="/OpenAction"/>
    <Keyword Count="0" HexcodeCount="0" Name="/AcroForm"/>
    <Keyword Count="0" HexcodeCount="0" Name="/JBIG2Decode"/>
    <Keyword Count="0" HexcodeCount="0" Name="/RichMedia"/>
    <Keyword Count="0" HexcodeCount="0" Name="/Launch"/>
    <Keyword Count="0" HexcodeCount="0" Name="/EmbeddedFile"/>
    <Keyword Count="0" HexcodeCount="0" Name="/XFA"/>
    <Keyword Count="0" HexcodeCount="0" Name="/Colors > 2^24"/>

我当前的用户输入验证是查看所有的内容类型,如果从“Encrypt”向下的计数是!= 0,则拒绝PDF。 我相信,有时当人们点击“打印到pdf”时,取决于使用的转换软件,有时会添加一些内容类型。因此,我目前拒绝pdf,即使可疑的内容类型实际上是无辜的。当然,我没有办法来确定是否JS是无辜的,但我想解除JS和继续与文件。 有没有一种方法,我可以采取一个PDF在内存然后自动解除/拆除它,覆盖以前的文件?我想做这样的事情

SuspectPDF = request.FILES['docfile'][0]
CleanPDF = disarmPDF(SuspectPDF)

我知道PDFiD有一个解除功能,但是我不确定它是否能够完成我在内存中想要的功能。我很想知道是否还有其他更常用的用户输入PDF验证解决方案,以及是否还有其他需要注意的事项。 问题来源StackOverflow 地址:/questions/59382994/best-way-to-disarm-user-uploaded-pdfs

展开
收起
kun坤 2019-12-27 16:55:30 651 0
1 条回答
写回答
取消 提交回答
  • 最好的方法是提取你需要的所有内容、标记和说明(文本、图像、表单数据、注释、字体等),然后扔掉pdf。 基于关键字的解决方案将不会工作,因为每个(甚至可能武装)PDF肯定会有一些关键字(如xref, obj/endobj等),并可能没有其他一些。参见PDF规范文件和文档结构,不同的说明等。 如果你使用python的内容提取看看包:

    2019-12-27 16:55:40
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
对象存储实战指南-试读 立即下载
OpenAnolis 龙蜥操作系统开源社区技术创新白皮书 立即下载
使用CNFS搭建弹性Web服务 立即下载