我们有一个简单的 ASP.NET Web 应用程序,它通过上传页面读取 Excel 文件并在数据库中插入行。用户正在上传一个 Excel 文件,该文件填充了 MSSQL 数据库中的表格。我们
我们有一个简单的 ASP.NET Web 应用程序,它通过上传页面读取 Excel 文件并在数据库中插入行。用户正在上传填充 MSSQL 数据库中表的 Excel 文件。
我们正在通过像这样的简单代码块读取 Excel 文件。
Dim con As New OleDb.OleDbConnection()
con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " & filePath & ";Extended Properties=Excel 12.0"
'Get data from Exel into a DataFile
Try
con.Open()
Dim cmd As New OleDb.OleDbCommand("SELECT * FROM [Sheet1$]", con)
Dim da As New OleDb.OleDbDataAdapter()
da.SelectCommand = cmd
Dim ds As New DataSet()
da.Fill(ds, "DataSet")
Return ds.Tables(0)
Catch ex As Exception
HttpContext.Current.Session("Error") = "err: " & ex.Message
Throw ex
Return New DataTable()
Finally
con.Close()
End Try
通过我们的应用程序读取恶意 Excel 文件是否会感染运行该页面的服务器?
Jet Engine 是否如此强大,以至于 它可能会 通过代码访问行时 嵌入在受感染的 Excel 文件中的恶意代码 ?
简单的回答是肯定的,这是可能的。世界上有两种类型的恶意标准办公文档:
基于宏的感染文件对于您来说并不是那么危险,因为它们是嵌入在文档中的一些额外对象,由用户交互触发,或者您的应用程序中的一些代码会自动执行宏,所以如果您没有任何代码在办公文档内执行宏,就不必担心办公文档被宏脚本感染!
另一方面,受感染的文档包含针对某些错误或逻辑功能等的漏洞。这些文件非常危险,因为它们利用了文档的标准功能(如解析器)。因此,如果您解析此类文件的底层 API 或引擎实现并使用了被利用的此功能,您的程序可能会受到影响!
最后,如果您想保护服务器免受这种情况的感染,您应该实现或使用现有的沙盒产品,以防止执行的文件对系统进行任何更改,并防止执行文件的网络和 IO 活动,并且为了更安全,最好在单独的机器或 VM 上进行解析过程,而不是直接在主服务器上进行,只需将结果返回给服务器。但一般来说,沙盒解决方案就足够了。
例如,下面是通过谷歌搜索“Microsoft Jet driver Exploit”找到的一些 Jet driver 漏洞的列表:
也许这种情况根本不会发生,因为安全专家在流行软件和工具发布之前会对其进行代码审查、模糊测试、渗透测试和漏洞赏金测试,这就是为什么你看到像 Jet 驱动程序这样的底层流行软件和工具的漏洞很少的原因,但即使在安全方面也没有什么是绝对的,没有人可以声称他的产品是安全的。
最后,这取决于您开发的平台以及安全性对您和您的产品有多重要。我的答案是学术性的,可能不会发生。但即使是绝对可能的。因此,您应该根据您的需要和风险选择最佳解决方案;)