Java 确保excel工作表是否包含任何用户定义的函数
我的应用程序包含一个上载选项,用户可以从中上载文件(任何文件)。 我知道用户有能力在excel工作表中编写代码/脚本。因此,我如何防止这种情况发生,因为这可能导致安全漏洞。Java 确保excel工作表是否包含任何用户定义的函数,java,excel,Java,Excel,我的应用程序包含一个上载选项,用户可以从中上载文件(任何文件)。 我知道用户有能力在excel工作表中编写代码/脚本。因此,我如何防止这种情况发生,因为这可能导致安全漏洞。 或者我可以应用什么检查来知道上传的工作表包含任何函数?我从Java标记中假设,上传工作表的应用程序是Java应用程序 使用apachepoi,您可以使用POIFSReader(参见此)在较低级别上读取文件 这里有一个Réal Gagnon的网站,展示了如何通过查看名字来检查内容 我不得不修改侦听器(添加了另一个比较) 所以它
或者我可以应用什么检查来知道上传的工作表包含任何函数?我从Java标记中假设,上传工作表的应用程序是Java应用程序 使用
apachepoi
,您可以使用POIFSReader
(参见此)在较低级别上读取文件
这里有一个Réal Gagnon的网站,展示了如何通过查看名字来检查内容
我不得不修改侦听器(添加了另一个比较)
所以它对一些测试文件有效。您可能需要调整/扩展检查。
HSSFCell.CELL\u TYPE\u公式
用于简单的单元格公式。OP想知道如何检测宏。@Jim Garrison谢谢你的提示,我已经更新了答案。谢谢,解决了我的问题。:)@不客气。感谢您确认它解决了您的问题。
class MacroListener implements POIFSReaderListener {
[...]
@Override
public void processPOIFSReaderEvent(POIFSReaderEvent event) {
System.out.println(" Event: Name " + event.getName() + ", path "
+ event.getPath());
if (event.getPath().toString().startsWith("\\Macros")
|| event.getPath().toString().startsWith("\\_VBA")
|| event.getPath().toString().contains("_VBA_")) {
this.macroDetected = true;
}
}
}