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 日かかることになります。
確かに正規表現作ってる時って、正しい文字列ばっかり考慮してるきらいがありますよね。
「*」とか「+」とかのネストとかもやばそう。
正規表現だと楽ーとか早いとかいう話は良く見聞きしますが、
やっぱり一概にそうも言えないですよね。