2017-10-10 3 views
1

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]

ワークシートにデータを書き込んで式として解釈されないようにするにはどうすればよいですか?すべてを文字列に強制するのではなく、日付や数値などの実行不可能なデータの書式設定を保持すると便利です。

答えて

1

コードインジェクションは危険ですが、ここではサンドボックスのExcelの仕事だと思いますが、これについて心配しているのであれば、追加の保護について考えるべきです。

ワークブック設定のcalculationノードが公開されているので、変更する必要があります。wb.calculation.fullCalcOnLoad = Falseが必要な場合があります。しかし、おそらく仕様を読む必要があるでしょう。

関連する問題