Billion laughs攻撃っていうのがある。

XMLで参照を多重に定義して、メモリを食いつぶさせてPCとかアプリを固まらさせるやつ。

で、これってSVGでも可能だったんですね。

下の画像をFireFoxで見るとFireFoxのタブが固まる。(Chromeは大丈夫だった)

https://github.com/cirosantilli/web/blob/master/svg-billion-laughs.svg

上の画像をDLして、例えばパワーポイントとかに画像挿入しようとするとパワポも固まる。


上の画像のソースを見ればわかりますが、この程度の参照の組み方だけで、

組み合わせ爆発でヤバイ事になるという訳なんですが、

参照をネストさせるようなものはやっぱり考え物って事ですね。

正規表現なんかも、例えば

(a|b|c)(e|d|f)

みたいに組み合わせで色々やるとエライこっちゃになるパターンがあったと思う。

↑だけじゃ再現させられなかったんですが、昔どこかのコードで見たんだよなー。

組み合わせ爆発って怖いですね。結構意識せずにやっちゃいそうな気もする。


正規表現でいうとMSDNの正規表現のベストプラクティスのページがすごく面白かった。

長さが 5 文字を超えると、文字列の文字が 1 文字増えるたびに処理時間が約 2 倍に増加します。 つまり、有効に近い文字列の長さが 28 文字になると処理に 1 時間以上かかり、33 文字になるとほぼ 1 日かかることになります。

確かに正規表現作ってる時って、正しい文字列ばっかり考慮してるきらいがありますよね。

「*」とか「+」とかのネストとかもやばそう。

正規表現だと楽ーとか早いとかいう話は良く見聞きしますが、

やっぱり一概にそうも言えないですよね。