Catatan terbitan Django 1.4.3¶
Desember 10, 2012
Django 1.4.3 mengalamatkan dua masalah keamanan yang hadir di terbitan Django sebelumnya di rangkaian 1.4.
Harap disadari bahwa terbitan keamanan ini sedikit berbeda dari satu sebelumnya. Kedua masalah dialamatkan disini telah ditangani dengan sebelum perbaharuan keamanan pada Django. Di satu kasus, kami telah menerima laporan berjalan dari masalah-masalah, dan di lainnya kami telah memilih untuk mengambil langkah-langkah selanjutnya untuk mengencangkan kode Django dalam menjawab pada penemuan berdiri sendiri dari masalah potensial dari banyak sumber.
Peracunan kepala Host¶
Beberapa terbitan keamanan Django paling awal fokus pada masaalah peracunan kepala Host HTTP, menyebabkan Django membangkitkan URL menunjuk ke berubah-ubah, ranah berpotensi-jahat.
Dalam tanggapan pada masukan lebih lanjut yang diterima dan melaporkan dari kelanjutan masalah-masalah mengikuti terbitan sebelumnya, kami mengambil langkah-langkah tambahan untuk memperketat pengecekan kepala Host. Daripada mencoba menampung semua fitur dukungan HTTP disini, pengecekan kepala Host Django berusaha mendukung terkecil, tetapi jauh lebih umum, bagian:
- Nama rumah harus terdiri dari karakter
[A-Za-z0-9]
ditambah strip ('-') atau dot ('.'). - Alamat IP -- kedua IPv4 dan IPv6 -- diperbolehkan.
- Pangkalan, jika ditentukan, adalah numerik.
Penyimpangan apapun dari ini akan ditolak, memunculkan pengecualian django.core.exceptions.SuspiciousOperation
.
Mengalihkan peracunan¶
Juga mengikuti pada masalah sebelumnya: di Juli tahun ini, kami membuat perubahan pada kelas-kelas pengalihan HTTP Django, melakukan tambahan pengesahan dari skema dari URL untuk mengalihkan ke (sejak, kedua dalam milik Django menyokong aplikasi dan banyak aplikasi pihak-ketiga, menerima sasaran pengalihan pasokan-pengguna adalah pola umum).
Sejak itu, dua pemeriksaan berdiri sendiri dari kode memunculkan masalah potensial lebih jauh. Jadi, mirip dengan masalah kepala_Rumah, kami mengambil langkah untuk menyediakan pengecekan ketat dalam tanggapan ke masalah (utamanya dengan aplikasi pihak-ketiga, tetapi pada tingkat tertentu juga dalam Django itu sendiri). Ini datang di dua bagian:
1. A new utility function, django.utils.http.is_safe_url
, is added; this
function takes a URL and a hostname, and checks that the URL is either
relative, or if absolute matches the supplied hostname. This function is
intended for use whenever user-supplied redirect targets are accepted, to
ensure that such redirects cannot lead to arbitrary third-party sites.
2. All of Django's own built-in views -- primarily in the authentication system
-- which allow user-supplied redirect targets now use is_safe_url
to
validate the supplied URL.