3

Billion Laughs DoS 攻撃は、XML ファイル内のエンティティの展開を停止するだけで防止できるようです。Python の xlrd ライブラリ (つまり、何らかのフラグ) でこれを行う方法はありますか? そうでない場合、攻撃を回避するための推奨される方法はありますか?

4

1 に答える 1

1

xlrd だけではありません

現時点では、あらゆる種類の XML 爆弾を防ぐためのオプションは xlrd にありません。ソース コードでは、xlsx データはxml.etree検証なしで解析するために Python のビルトインに渡されます。

import xml.etree.ElementTree as ET

def process_stream(self, stream, heading=None):
        if self.verbosity >= 2 and heading is not None:
            fprintf(self.logfile, "\n=== %s ===\n", heading)
        self.tree = ET.parse(stream)

ElementTreeただし、 defusedxml を使用してパッチを適用できる場合があります。

コメントで指摘されているように、defusedxmlは、さまざまな種類の XML 爆弾に対するセキュリティの問題を直接対象としたパッケージです。ドキュメントから:

それ以外の:

from xml.etree.ElementTree import parse
et = parse(xmlfile)

コードを次のように変更します。

from defusedxml.ElementTree import parse
et = parse(xmlfile)

また、標準ライブラリにパッチを適用する機能も提供します。これは xlrd が使用しているものであるため、xlrd と defusedxml の組み合わせを使用して、XML 爆弾から身を守りながら Excel ファイルを読み取ることができます。

さらに、このパッケージには、defusedxml.defuse_stdlib() を使用してすべての stdlib モジュールにモンキー パッチを適用する未テストの機能があります。

于 2016-04-26T21:18:46.673 に答える