Catatan terbitan Django 1.7.3

13 Januari 2015

Django 1.7.3 memperbaiki beberapa masalah keamanan dan kesalahan di 1.7.2.

Kepala WSGI menipu melalui garis bawah atau penggabungan tanda garis

Ketika kepala HTTP ditempatkan kedalam kepungan WSGI, mereka dinormalkan dengan merubah menjadi huruf besar, merubah semua tanda garis menjadi garis bawah, dan megnawali HTTP_. Sebagai contoh, sebuah kepala X-Auth-User akan menjadi HTTP_X_AUTH_USER di kepungan WSGI (dan demikian juga di kamus request.META Django).

Sayangnya, ini berarti bahwa kepungan WSGI tidak dapat membedakan diantara kepala mengandung tanda garis dan kepala mengandung garis bawah: X-Auth-User dan X-Auth_User keduanya menjadi HTTP_X_AUTH_USER. Ini berarti bahwa jika kepala digunakan dalam cara sensitif-keamanan (sebagai contoh, melewatkan informasi otentifikasi bersama dari proxy paling-depan), bahkan jika proxy secara hati-hati melucuti nilai apapun yang datang untuk X-Auth-User, seorang penyerang mungkin dapat menyediakan kepala X-Auth_User (dengan garis bawah) dan melewatkan perlindungan ini.

Untuk mencegah serangan seperti itu, kedua Nginx dan Apache 2.4+ melucuti semua kepala mengandung garis bawah dari permintaan yang datang secara awalan. Peladen pengembangan siap-pakai Django sekarang melakukan hal sama. Peladen pengembangan Django tidak dianjurkan untuk penggunaan produksi, tetapi mencocokkan perilaku dari produksi umum peladen mengurangi kawasan permukaan untuk perubahan perilaku selama penyebaran.

Mengurangi kemungkinan serangan XSS melalui mengalihkan URL penyediaan-pengguna

Django bergantung pada masukan pengguna di beberapa kasus (sebagai contoh django.contrib.auth.views.login() dan i18n) untuk mengalihkan pengguna ke URL “on success”. Pemeriksaan keamanan untuk pengalihan ini (dinamai django.utils.http.is_safe_url()) tidak memotong ruang kosong didepan pada URL dicobakan dan dianggap URL seperti \njavascript:... aman. Jika seorang pengembang bergantung pada is_safe_url() untuk menyediakan sasaran pengalihan aman dan menaruh URL seperti itu kedalam sebuah tautan, mereka dapat menderita dari serangan XSS. Kesalahan ini tidak mempengaruhi Django saat ini, karena kami hanya menaruh URL ini kedalam kepala tanggapan Location dan peramban melihat untuk mengabaikan JavaScript disana.

Serangan denial-of-service terhadap django.views.static.serve

Di versi terlama dari Django, tampilan django.views.static.serve() membaca berkas-berkas itu dilayani satu baris pada satu waktu. Karena itu, berkas besar dengan tidak ada baris baru akan menghasilkan penggunaan memori sama pada ukuran berkas itu. Seorang penyerang dapat memanfaatkan ini dan meluncurkan serangan denial-of-service dengan permintaan banyak berkas besar secara bersama. Tampilan ini sekarang membaca berkas dalam potongan untuk mencegah penggunaan memori besar.

Catat, bagaimanapun bahwa tampilan ini selalu membawa peringatan yang itu tidak mengeras untuk penggunaan produksi dan harus digunakan hanya sebagai bantuan pengembangan. Sekarang mungkin waktu bagus untuk memeriksa peoyek anda dan melayani berkas anda di penggunaan produksi menggunakan peladen jaringan paling-depan sebenarnya jika anda tidak melakukannya.

Denial-of-service basisdata dengan ModelMultipleChoiceField

Diberikan sebuah formulir yang menggunakan ModelMultipleChoiceField dan show_hidden_initial=True (bukan sebuah dokumentasi API), itu memungkinkan untuk pengguna untuk menyebabkan angka tidak beralasan dari permintaan SQL dengan mengajukan penggandaan nilai untuk data bidang. Logika pengesahan di ModelMultipleChoiceField sekarang menghapus penggandaan nilai diajukan ke alamat masalah ini.

Perbaikan kesalahan

  • Perhitungan putaran awal untuk pencampur sandi PBKDF2 telah ditingkatkan oleh 25%. Bagian ini dari pengolahan terbitan utama biasa telah secara tidak sengaja dihilangkan di 1.7. Perubahan kesesuaian kebelakang tidak akan mempengaruhi pengguna yang telah disubkelaskan django.contrib.auth.hashers.PBKDF2PasswordHasher untuk merubah nilai awal.

  • Fixed sebuah kegagalan di middleware CSRF ketika menangani bukan-ASCII megnarah kepala (#23815).

  • Diperbaiki sebuah kegagalan di tampilan django.contrib.auth.redirect_to_login ketika melewatkan hasil reverse_lazy() pada Python 3 (#24097).

  • Ditambahkan bentuk benar untuk Yunani (el) (#23967).

  • Diperbaiki sebuah kegagalan ketika tidak memberlakukan perpindahan dimana banyak operasi interaksi dengan model sama (#24110).

Back to Top