Django 1.8.3 release notes¶
8 juli 2015
Django 1.8.3 åtgärdar flera säkerhetsproblem och buggar i 1.8.2.
Dessutom döptes django.utils.deprecation.RemovedInDjango20Warning
om till RemovedInDjango110Warning
eftersom versionsplanen reviderades till 1.9, 1.10, 1.11 (LTS), 2.0 (släpper Python 2-stöd). För bakåtkompatibilitet kvarstår RemovedInDjango20Warning
som ett importerbart alias.
Möjligheten att neka tjänst genom att fylla sessionslagret¶
I tidigare versioner av Django skapade sessionsbackends en ny tom post i sessionslagret varje gång request.session
öppnades och det fanns en sessionsnyckel som tillhandahölls i begäran cookies som inte redan hade en sessionspost. Detta kan göra det möjligt för en angripare att enkelt skapa många nya sessionsposter helt enkelt genom att skicka upprepade förfrågningar med okända sessionsnycklar, vilket potentiellt kan fylla upp sessionslagret eller orsaka att andra användares sessionsposter kastas ut.
De inbyggda sessionsbackends skapar nu en sessionspost endast om sessionen faktiskt ändras; tomma sessionsposter skapas inte. Därför är denna potentiella DoS nu endast möjlig om webbplatsen väljer att exponera en sessionsmodifierande vy för anonyma användare.
Eftersom varje inbyggd sessionsbackend åtgärdades separat (i stället för en åtgärd i kärnramverket för sessioner), bör underhållare av sessionsbackends från tredje part kontrollera om samma sårbarhet finns i deras backend och åtgärda den om så är fallet.
Möjlighet att injicera rubriker eftersom validerare accepterar nya rader i indata¶
Vissa av Djangos inbyggda validerare (EmailValidator
, mest allvarligt) förbjöd inte tecken med nya rader (på grund av användningen av $
istället för \Z
i de reguljära uttrycken). Om du använder värden med nya rader i HTTP-svar eller e-postheaders kan du drabbas av header injection-attacker. Django i sig är inte sårbart eftersom HttpResponse
och verktygen för att skicka e-post i django.core.mail
förbjuder nya rader i HTTP- respektive SMTP-rubriker. Validerarna har åtgärdats i Django, men om du skapar HTTP-svar eller e-postmeddelanden på andra sätt är det en bra idé att se till att dessa metoder också förbjuder nya rader. Du kanske också vill validera att befintliga data i din applikation inte innehåller oväntade nya rader.
validate_ipv4_address()
, validate_slug()
, och URLValidator
påverkas också, men från och med Django 1.6 formfälten GenericIPAddresseField
, IPAddressField
, SlugField
och URLField
som använder dessa validerare alla inmatningen, så möjligheten att nya rader kommer in i dina data finns bara om du använder dessa validerare utanför formfälten.
Den odokumenterade, internt oanvända funktionen validate_integer()
är nu striktare eftersom den validerar med hjälp av ett reguljärt uttryck istället för att bara kasta värdet med int()
och kontrollera om ett undantag uppstod.
Denial-of-service-möjlighet i URL-validering¶
URLValidator
inkluderade ett reguljärt uttryck som var extremt långsamt att utvärdera mot vissa ogiltiga indata. Detta reguljära uttryck har förenklats och optimerats.
Buggrättningar¶
Fixade
BaseRangeField.prepare_value()
till att använda varjebase_field
’sprepare_value()
metod (#24841).Korrigerad krasch under
makemigrations
om en migrationsmodul antingen saknar__init__.py
eller är en fil (#24848).Fixade
QuerySet.exists()
som returnerade felaktiga resultat efter annotering medCount()
(#24835).Rättad
HStoreField.has_changed()
(#24844).Återställde en optimering av CSRF-mallkontextprocessorn som orsakade en regression (#24836).
Åtgärdade en regression som gjorde att mallkontextprocessorer skrev över variabler som ställts in på en
RequestContext
efter att den skapats (#24847).Förhindrade förlust av kolumnegenskaper för
null
/not null` under fältomdöpning av MySQL-databaser (#24817).Fixade en krasch när man använde en omvänd ett-till-ett-relation i
ModelAdmin.list_display
(#24851).Fixat citat av SQL när du byter namn på ett fält till
AutoField
i PostgreSQL (:biljett:`24892``).Åtgärdat avsaknad av unik begränsning när ett fält ändras från
primary_key=True
tillunique=True
(#24893).Fixat queryset pickling när man använder
prefetch_related()
efter att ha tagit bort objekt (#24831).Tillåtet att använda
choices
längre än 1 dag medDurationField
(#24897).Åtgärdade en krasch vid laddning av krossade migreringar från två appar med ett beroende mellan dem, där den beroende appens ersatta migreringar delvis tillämpas (#24895).
Korrigerad registrering av tillämpad status för krossade (ersättande) migreringar (#24628).
Fixade queryset-annoteringar när man använder
Case
-uttryck medexclude()
(#24833).Korrigerad join-marknadsföring för flera
Case
-uttryck. Om en fråga kommenterades med fleraCase
-uttryck kunde resultat oväntat filtreras bort (#24924).Fast användning av transforms i underfrågor (#24744).
Fixade
SimpleTestCase.assertRaisesMessage()
på Python 2.7.10 (#24903).Bättre bakåtkompatibilitet för argumentet
verbosity
i hanteringskommandonoptparse
genom att omvandla det till ett heltal (#24769).Fixade
prefetch_related()
på andra databaser än PostgreSQL för modeller som använder UUID-primärnycklar (#24912).Fixat borttagning av
unique_together
-begränsningar på MySQL (#24972).Fixad krasch vid uppladdning av bilder med MIME-typer som Pillow inte upptäcker, t.ex. bitmap, i
forms.ImageField
(#24948).Åtgärdade en regression vid borttagning av en modell via admin som har en
GenericRelation
med ettrelated_query_name
(#24940).Tillåter icke-ASCII-värden för
ForeignKey.related_name
på Python 3 genom att åtgärda systemkontrollen för falska positiva (#25016).Fixade inline-formulär som använder ett överordnat objekt som har en primärnyckel av typen
UUIDField
och ett underordnat objekt som har en primärnyckel av typenAutoField
(#24958`).Åtgärdade en regression i mallfiltret
unordered_list
på vissa inmatningar (#25031).Åtgärdade en regression i
URLValidator
som ogiltigförklarade Punycode TLD:er (#25059).Förbättrad pollning av
runserver
frånpyinotify
(#23882).