Django 1.3.6 release notes¶
19 februari 2013
Django 1.3.6 åtgärdar fyra säkerhetsproblem som fanns i tidigare Django-versioner i 1.3-serien.
Detta är den sjätte bugfix/säkerhetsreleasen i Django 1.3-serien.
Förgiftning av värdhuvud¶
Vissa delar av Django - oberoende av slutanvändarskrivna applikationer - använder sig av fullständiga URL:er, inklusive domännamn, som genereras från HTTP Host-headern. Djangos dokumentation har under en tid innehållit anteckningar som ger användarna råd om hur man konfigurerar webbservrar för att säkerställa att endast giltiga Host-rubriker kan nå Django-applikationen. Det har dock rapporterats till oss att även med de rekommenderade webbserverkonfigurationerna finns det fortfarande tekniker tillgängliga för att lura många vanliga webbservrar att förse applikationen med en felaktig och eventuellt skadlig Host-header.
Av denna anledning lägger Django 1.3.6 till en ny inställning, ALLOWED_HOSTS
, som ska innehålla en explicit lista över giltiga värd-/domännamn för den här webbplatsen. En begäran med ett värdhuvud som inte matchar en post i den här listan kommer att ge upphov till SuspiciousOperation
om request.get_host()
anropas. För fullständig information se dokumentationen för inställningen ALLOWED_HOSTS
.
Standardvärdet för denna inställning i Django 1.3.6 är ['*']
(matchar alla värdar), för bakåtkompatibilitet, men vi rekommenderar starkt alla webbplatser att ange ett mer restriktivt värde.
Denna värdvalidering inaktiveras när DEBUG
är True
eller när tester körs.
XML-deserialisering¶
XML-parsern i Pythons standardbibliotek är sårbar för ett antal attacker via externa entiteter och entitetsexpansion. Django använder denna parser för att deserialisera XML-formaterade databasfixturer. Deserialiseraren för fixturer är inte avsedd att användas med otillförlitliga data, men för att vara på den säkra sidan i Django 1.3.6 vägrar XML-deserialiseraren att parsa ett XML-dokument med en DTD (DOCTYPE-definition), vilket stänger av dessa attackvägar.
Dessa problem i Pythons standardbibliotek är CVE-2013-1664 och CVE-2013-1665. Mer information finns tillgänglig från Pythons säkerhetsteam.
Djangos XML-serialisator skapar inte dokument med en DTD, så detta bör inte orsaka några problem med den typiska rundresan från dumpdata
till loaddata
, men om du matar in dina egna XML-dokument till kommandot loaddata
måste du se till att de inte innehåller en DTD.
Utmattning av Formset-minnet¶
I tidigare versioner av Django validerades eller begränsades inte formulärantalet som klienten angav i ett formulärhanteringsformulär, vilket gjorde det möjligt att tömma en servers tillgängliga minne genom att tvinga den att skapa ett mycket stort antal formulär.
I Django 1.3.6 har alla formulär ett strikt påtvingat maximalt antal formulär (1000 som standard, men det kan ställas in högre via fabriksargumentet max_num
för formulär).
Admin historik visa informationsläckage¶
I tidigare versioner av Django kunde en adminanvändare utan ändringsbehörighet för en modell fortfarande se Unicode-representationen av instanser via sin adminhistoriklogg. Django 1.3.6 begränsar nu visningen av adminhistorikloggen för ett objekt till användare med ändringsbehörighet för den modellen.