openpyxlを使用して信頼できない入力に基づいてスプレッドシートを作成する場合(たとえば、管理分析用のWebアプリケーションからのデータのエクスポート)、式はスクリプト注入のベクトルになります。 Excelがスプレッドシートで悪意のある式を実行すると、管理者のマシンを引き継ぐか、データを抽出できます。例えばopenpyxlワークブックに追加された式の実行を防止する
、この単純なブックは、以下の式を追加:
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]
ワークシートにデータを書き込んで式として解釈されないようにするにはどうすればよいですか?すべてを文字列に強制するのではなく、日付や数値などの実行不可能なデータの書式設定を保持すると便利です。