excel - *.xlsx 文件何时以及为什么包含 *.bin 文件?
问题描述
我目前正在开展一个项目,以评估上传*.xlsx
的文件是否真的只是一个*.xlsx
文件而不是*.xlsm
扩展名已更改的文件。
由于一个*.xlsx
文件或多或少是一个*.zip
文件,我提取了内容并注意到一些文件包含一个*.bin
文件,而另一些则没有。尽管 excel 文件可能是合法的,但没有任何尝试通过欺骗用户重命名来注入另一个扩展名。
因此我的问题是:文件何时xlsx
包含*.bin
文件?这种方法是否适合检测xlsx
文件是否包含宏?
我还在检查[content_types].xml
文件的内容以包含以下字符串之一:application/vnd.ms-office.vbaproject
和application/vnd.ms-excel.sheet.macroenabled
.
解决方案
xlsx 文件何时包含 *.bin 文件?
好吧,bin 文件不仅是为具有宏的工作簿创建的,而且是为其中嵌入了 OLE 对象的工作簿创建的。
试试这个。创建一个新工作簿并单击Developer Tab | Insert ActiveX control - Say Commandbutton
。将文件保存并关闭为.xlsx
. 重命名.Zip
并检查 zip 文件
编辑:
是的,有时也可以存储打印机设置。快速搜索并发现了这个链接
如果链接失效,请从上面的链接中提取。
除了 VBA 项目和嵌入的 OLE 对象,我们还在 Excel 2007 .XLSB 文件中找到 BIN 部分,原因如下:
- 工作簿部分workbook.bin(MIME类型:application/vnd.ms-excel.workbook)
- 样式字典部分styles.bin(MIME类型:application/vnd.ms-excel.styles)
对于每个工作表,
一种。索引部分工作表/binaryIndexxx.bin(MIME 类型:application/vnd.ms-excel.binIndexWs)
湾。工作表部分worksheets/sheetxxx.bin(MIME类型:application/vnd.ms-excel.worksheet)
C。一个可选的打印机设置部分printerSettings/printerSettingsxxx.bin(MIME类型:application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings)
可选计算链部分calcChain.bin(MIME类型:application/vnd.ms-excel.calcChain)
- 可选注释部分 commentsxxx.bin(MIME 类型:application/vnd.ms-office.legacyDrawing)
- 可选表格部分表格/tablexxx.bin(MIME类型:application/vnd.ms-excel.table)
- 可选连接部分connections.bin(MIME类型:application/vnd.ms-excel.connections)
- 可选 Chartsheet、Dialogsheet、Macrosheet 部件(chartsheets/sheetxxx.bin、dialogsheets/sheetxxx.bin、macrosheets/sheetxxx.bin)(MIME 类型:application/vnd.ms-excel.chartsheet、application/vnd.ms-excel.dialogsheet、应用程序/vnd.ms-excel.macrosheet)
- 可选数据透视表部分 (pivotTables/pivotTablexxx.bin)(MIME 类型:application/vnd.ms-excel.pivotTable)
- 可选数据透视表缓存定义和记录部分(pivotCache/pivotCacheDefinitionxxx.bin、pivotCache/pivotCacheRecordsxxx.bin)(MIME 类型:application/vnd.ms-excel.pivotCacheDefinition、application/vnd.ms-excel.pivotCacheRecords)
- 可选查询表(queryTables/queryTablexxx.bin)(MIME类型:application/vnd.ms-excel.queryTable)
推荐阅读
- iis - 是否可以在 url 重写规则中创建一个仅适用于部分用户的条件
- sql - 如何将一个表上的 3 列与另一表中的 1 列连接起来?
- mysql - MySQL 中哪个更快,更新整个表或使用 WHERE 子句更新?
- angular6 - Angular 无法读取“未定义”的值 - 无法在 setTitle() 方法中读取“casestudy”的值?
- javascript - Stripe 是否可以根据用户的位置(国家)动态显示货币?
- css - 如果屏幕足够宽并且在彼此下方,如何自动将画布放在桌子旁边?
- r - 如何在不添加日期的情况下将 chr 转换为时间?
- asp.net-core - MassTransit 5.2,SignalR:如何在我的消费者中获取 IHubContext?
- neo4j - Prolog 的 Neo4j 推理替代方案
- encoding - FFMPEG 直通记录 RTSP/H264 到 MP4 容器编码错误