防止添加到openpyxl工作簿的公式执行

时间:2017-10-10 15:54:03

标签: python openpyxl

当使用openpyxl基于不受信任的输入创建电子表格时(例如,从Web应用程序导出数据以进行管理分析),公式可以是脚本注入的向量。如果excel在电子表格中执行恶意公式,他们可以接管管理员的计算机或泄露数据。

例如,这个简单的工作簿添加了一个公式:

from openpyxl import Workbook

wb = Workbook()
ws = wb.active()
ws.append(["=1 + 2"])
ws.save(filename='/tmp/formula.xlsx')

在excel中打开/tmp/formula.xlsx时,会执行公式。 =1 + 2是良性的,但它也可能像=2+5+cmd|' /C calc'!A0更邪恶。 [reference]

如何将数据写入工作表以确保它不被解释为公式?保留非可执行数据(如日期和数字)的格式非常方便,而不是将所有内容强制转换为字符串。

2 个答案:

答案 0 :(得分:1)

你是正确的,代码注入是一种风险,虽然它可以说是Excel在这里沙箱的工作,如果你担心这个,那么你真的应该考虑额外的保护。

我们确实公开了工作簿设置的calculation节点,因此我认为更改wb.calculation.fullCalcOnLoad = False可能确实需要您。但是你可能需要阅读规范才能确定。

答案 1 :(得分:0)

我最近遇到了这个问题。我遇到了一个黑客,如果它以viewControllerList = [ OpenViewController(viewController: FirstScreen()) ] 开头,则会在字符串值的开头添加一个制表符。像这样:

=

另一种方法是使用if value and value[0] == '"': value = "\t" + value

cell.set_explicit_value