Kerangka pemeriksaan sistem

Kerangka sistem pemeriksaan adalah kumpulan dari pemeriksaan tetap untuk memeriksa kebenaran proyek Django. Dia menemukan masalah umum dan menyediakan petunjuk untuk bagaimana memperbaiki mereka. Kerangka ini dapat diperpanjang sehingga anda dapat dengan mudah menambahkan pemeriksaan anda sendiri.

Untuk rincian bagaimana anda menambahkan pemeriksaan sendiri dan menyatukan mereka ke dalam pemeriksaan sistem Django, lihat System check topic guide.

Acuan API

CheckMessage

class CheckMessage(level, msg, hint=None, obj=None, id=None)[sumber]

Peringatan dan kesalahan dimunculkan oleh sistem pemeriksaan harus contoh dari CheckMessage. Sebuah instance merangkum kesalahan atau peringatan dapat dilaporkan tunggal. Dia juga menyediakan konteks dan petunjuk yang berlaku pada pesan, dan penciri unik yang digunakan untuk tujuan penyaringan.

Argumen pembangun adalah:

level

Kesederhanaan dari pesan. Gunakan satu dari nilai-nilai yang sudah ditentukan: DEBUG, INFO, WARNING, ERROR, CRITICAL. Jika tingkatan lebih hebat atau sama dengan ERROR, kemudian Django akan mencegah perintah pengelolaan dari menjalankan. Pesan-pesan dengan tingkatan lebih rendah dari ERROR (yaitu peringatan) dilaporkan ke konsol, tetapi dapat disenyapkan.

msg

Deretan kalimat (kurang dari 80 karakter) pendek menggambarkan masalah. Deretan kalimat seharusnya tidak mengandung baris baru.

hint

Deretan karakter baris-tunggal menyediakan petunjuk untuk memperbaiki masalah. Jika tidak ada petunjuk disediakan, atau petunjuk adalah terbukti-sendiri dari pesan kesalahan, petunjuk dapat diabaikan, atau nilai dari None dapat digunakan.

obj

Pilihan. Sebuah obyek menyediakan konteks untuk pesan (sebagai contoh, model dimana masalah ditemukan). Obyek harus menjadi model, bidang, atau pengelola atau obyek lain apapun yang menentukan cara __str__ (pada Python 2 anda butuh menentukan cara __unicode__). Cara digunakan selagi melaporkan semua pesan dan hasilnya mendahului pesan.

id

Deretan karakter pilihan. Sebuah penciri unik untuk masalah. Penciri harus mengikuti pola applabel.X001, dimana X adalah satu dari huruf CEWID, menunjukkan kesederhanaan pesan (C for kritis, E untuk kesalahan dan sebagainya). Angka dapat dialokasikan dengan aplikasi, tetapi harus unik dalam aplikasi itu.

Ada subkelas-subkelas untuk membuat pesan dengan tingkatan umum lebih mudah. Ketika menggunakan mereka anda dapat megnabaikan argumen level karena dia disisipkan oleh nama kelas.

class Debug(msg, hint=None, obj=None, id=None)[sumber]
class Info(msg, hint=None, obj=None, id=None)[sumber]
class Warning(msg, hint=None obj=None, id=None)[sumber]
class Error(msg, hint=None, obj=None, id=None)[sumber]
class Critical(msg, hint=None, obj=None, id=None)[sumber]

Pemeriksaan siap pakai

Etiket siap pakai

Sistem pemeriksaan Django diorganisasikan menggunakan etiket berikut:

  • models: memeriksa pemerintahan model, bidang dan pengertian pengelolaan.

  • signals: Periksa pada pernyataan sinyal dan penangan pendaftaran.

  • admin: Periksa pernyataan situs admin apapun.

  • compatibility: Masalah potensial penandaan dengan versi ditingkatkan.

  • security: Periksa keamanan konfigurasi terkait.

  • templates: Periksa cetakan konfigurasi terkait.

  • caches: Periksa penyimpanan konfigurasi terkait.

  • urls: Memeriksa konfigurasi URL.

  • database: Memeriksa masalah-masalah konfigurasi terkait-basisdata. Pemeriksaan basisdata tidak berjalan secara awal karena mereka melakukan lebih dar analisa kode tetap seperti pemeriksaan biasa lakukan. Mereka hanya berjalan oleh perintah migrate atau jika anda menentukan etiket database ketika memanggil perintah check.

Etiket database telah ditambahkan.

Beberapa pengecekan mungkin didaftarkan dengan banyak etiket.

Pemeriksaan sistem inti

Model

  • models.E001: <swappable> bukan dari formulir app_label.app_name.

  • models.E002: <SETTING> acuan <model>, yang belum dipasang, atau abstrak.

  • models.E003: Model mempunyai hubungan many-to-many melalui model menengah <app_label>.<model>.

  • models.E004: id dapat hanya digunakan sebagai nama bidang jika bidang juga disetel primary_key=True.

  • models.E005: Bidang <field name> dari model induk <model> bentrok dengan bidang <field name> dari model induk <model>.

  • models.E006: Bidang bentrok dengan bidang <field name> dari model <model>.

  • models.E007: Field <field name> mempunyai nama kolom <column name> yang digunakan oleh bidang lain.

  • models.E008: index_together harus berupa daftar atau tuple.

  • models.E009: Semua unsur index_together harus berupa daftar atau tuple.

  • models.E010: unique_together harus berupa daftar atau tuple.

  • models.E011: Semua unsur unique_together harus berupa daftar atau tuple.

  • models.E012: index_together/unique_together mengacu pada bidang tidak ada <field name>.

  • models.E013: index_together/unique_together mengacu pada ManyToManyField <field name>, tetapi ManyToManyField tidak didukung untuk pilihan itu.

  • models.E014: ordering harus berupa tuple atau daftar (bahkan jika anda ingin memesan hanya satu bidang).

  • models.E015: ordering mengacu pada bidang tidak ada <field name>.

  • models.E016: index_together/unique_together mengacu pada bidang <field_name> yang bukan lokal ke model <model>.

  • models.E017: Model proxy <model> mengandung bidang-bidang model.

  • models.E018: Nama kolom otomatis dibangkitkan terlalu panjang untuk bidang <field>. Panjang maksimum adalah <maximum length> untuk basisdata <alias>.

  • models.E019: Nama kolom otomatis dibangkitkan terlalu panjang untuk bidang M2M <M2M field>. Panjang maksimum adalah <maximum length> untuk basisdata <alias>.

  • models.E020: Cara kelas <model>.check() saat ini dikesampingkan.

  • models.E021: ordering dan order_with_respect_to tidak dapat digunakan bersama-sama.

  • models.E022: <function> mengandung acuan lazy pada <app label>.<model>, tetapi aplikasi <app label> tidak dipasang atau tidak menyediakan model <model>.

Bidang

  • fields.E001: Nama bidang tidak boleh berakhir dengan garis bawah.

  • fields.E002: Nama bidang tidak harus mengandung "__".

  • fields.E003: pk adalah kata terpesan yang tidak dapat digunakan sebagai nama bidang.

  • fields.E004: choices harus dapat berulang (sebagai contoh, daftar atau tuple).

  • fields.E005: choices harus dapat berulang mengembalikan tuple (nilai sebenarnya, nama yang dapat dibaca manusia).

  • fields.E006: db_index harus berupa None, True atau False.

  • fields.E007: Primary key tidak harus mempunyai null=True.

  • fields.E100: ``AutoField harus disetel primary_key=True.

  • fields.E110: BooleanField tidak menerima nilai-nilai null.

  • fields.E120: CharField harus menentukan atribut max_length.

  • fields.E121: max_length harus integer positif.

  • fields.W122: max_length diabaikan ketika digunakan dengan IntegerField.

  • fields.E130: DecimalField harus ditentukan atribut decimal_places.

  • fields.E131: decimal_places harus berupa integer bukan-negatif.

  • fields.E132: DecimalField harus ditentukan atribut max_digits.

  • fields.E133: max_digits harus berupa integer bukan-negatif.

  • fields.E134: max_digits harus lebih besar atau sama dengan decimal_places.

  • fields.E140: FilePathField harus mempunyai salah satu allow_files atau allow_folders disetel ke True.

  • fields.E150: GenericIPAddressField tidak dapat menerima nilai-nilai kosong jika nilai-nilai null tidak diijinkan, sebagai nilai-nilai kosong disimpan sebagai null.

  • fields.E160: Pilihan auto_now, auto_now_add, dan default saling eksklusif. Hanya satu dari pilihan-pilihan ini mungkin dihadirkan.

  • fields.W161: Nilai awal tetap disediakan.

  • fields.E900: IPAddressField telah dipindahkan kecuali untuk dukungan dalam riwayat perpindahan.

  • fields.W900*: IPAddressField telah diusangkan. Dukung untuk dia (kecuali dalam riwayat perpindahan) akan dipindahkan di Django 1.9. Pemeriksaan ini muncul di Django 1.7 and 1.8.

  • fields.W901: CommaSeparatedIntegerField telah diusangkan. Dukungan untuknya (kecuali di perpindahan bersejarah) akan dipindahkan di Django 2.0.

Bidang Berkas

  • fields.E200: unique bukan argumen sah untuk FileField.

  • fields.E201: primary_key bukan argumen sah untuk FileField.

  • fields.E210: Tidak dapat menggunakan ImageField karena Pillow tidak dipasang.

Sinyal

  • signals.E001: <handler> telah terhubung ke sinyal <signal> dengan acuan lazy ke pengirim <app label>.<model>, tetapi aplikasi <app label> tidak terpasang atau tidak menyediakan model <model>.

Kesesuaian Kebelakang

Pemeriksaan berikut dilakukan untuk memperingati pengguna dari setiap kemungkinan masalah yang mungkin muncul sebagai sebuah hasil dari versi peningkatan.

  • 1_6.W001: Beberapa deretan satuan proyek mungkin tidak dikerjakan sesuai harapan. Pemeriksaan ini telah dipindahkan di Django 1.8 karena menjadi salah positof.

  • 1_6.W002: BooleanField tidak mempunyai nilai awal. Pemeriksaan ini dipindahkan di Django 1.8 karena positif salah.

  • 1_7.W001: Django 1.7 merubah awal global untuk MIDDLEWARE_CLASSES. django.contrib.sessions.middleware.SessionMiddleware, django.contrib.auth.middleware.AuthenticationMiddleware, dan django.contrib.messages.middleware.MessageMiddleware dipindahkan dari awal. Jika proyek anda butuh middleware ini lalu anda harus mengkonfigurasi pengaturan ini. Pemeriksaan ini dipindahkan di Django 1.9.

  • 1_8.W001: Pengaturan TEMPLATE_* berdiri sendiri telah diusangkan di Django 1.8 dan kamus TEMPLATES mengambil hak lebih tinggi. Anda harus menaruh nilai-nilai dari pengaturan berikut kedalam TEMPLATES kamus: TEMPLATE_DIRS, TEMPLATE_CONTEXT_PROCESSORS, TEMPLATE_DEBUG, TEMPLATE_LOADERS, TEMPLATE_STRING_IF_INVALID.

  • 1_10.W001: Pengaturan MIDDLEWARE_CLASSES diusangkan di Django 1.10 dan pengaturan MIDDLEWARE mengambil hak lebih tinggi. Sejak anda telah menyetel MIDDLEWARE, nilai dari MIDDLEWARE_CLASSES diabaikan.

Admin

Admin memeriksa semua yang dilakukan sebagai bagian dari etiket admin.

Pemeriksaan berikut dilakukan pada setiap ModelAdmin (atau subkelas) yang terdaftar dengan situs admin:

  • admin.E001: Nilai dari raw_id_fields harus berupa daftar atau tuple.

  • admin.E002: Nilai dari raw_id_fields[n] mengacu pada <field name>, yang bukan sebuah atribut dari <model>.

  • admin.E003: Nilai dari raw_id_fields[n] harus foreign key atau bidang many-to-many.

  • admin.E004: Nilai-nilai dari fields harus berupa daftar atau tuple.

  • admin.E005: kedua fieldsets dan fields ditentukan.

  • admin.E006: Nilai dari fields mengandung bidang ganda.

  • admin.E007: Nilai dari fieldsets harus berupa daftar atau tuple.

  • admin.E008: Nilai dari fieldsets[n] harus berupa daftar atau tuple.

  • admin.E009: Nilai dari fieldsets[n] harus panjang 2.

  • admin.E010: Nilai dari fieldsets[n][1] harus berupa kamus.

  • admin.E011: Nilai dari fieldsets[n][1] harus mengandung kunci fields.

  • admin.E012: Ada bidang ganda dalam fieldsets[n][1].

  • admin.E013: fields[n]/fieldsets[n][m] tidak dapat menyertakan <field name> ManyToManyField, karena bidang itu secara manual menentukan sebuah hubungan model.

  • admin.E014: Nilai dari exclude harus berupa daftar atau tuple.

  • admin.E015: Nilai dari exclude mengandung bidang ganda.

  • admin.E016: Nilai dari form harus warisan dari BaseModelForm.

  • admin.E017: Nilai dari filter_vertical harus berupa daftar atau tuple.

  • admin.E018: Nilai-nilai dari filter_horizontal harus berupa daftar atau tuple.

  • admin.E019: Nilai dari filter_vertical[n]/filter_vertical[n] mengacu pada <field name>, yang bukan sebuah atribut dari <model>.

  • admin.E020: Nilai dari filter_vertical[n]/filter_vertical[n] harus berupa bidang many-to-many.

  • admin.E021: Nilai dari radio_fields harus berupa kamus.

  • admin.E022: Nilai dari radio_fields mengacu pada <field name>, yang bukan sebuah atribut dari <model>.

  • admin.E023: Nilai dari radio_fields mengacu pada <field name>, yang bukan ForeignKey, dan tidak mempunyai pengertian choices.

  • admin.E024: Nilai dari radio_fields[<field name>] harus berupa admin.HORIZONTAL atau admin.VERTICAL.

  • admin.E025: Nilai dari view_on_site harus berupa callable atau nilai boolean.

  • admin.E026: Nilai dari prepopulated_fields harus berupa kamus.

  • admin.E027: Nilai dari prepopulated_fields mengacu pada <field name>, yang bukan sebuah atribut dari <model>.

  • admin.E028: Nilai dari prepopulated_fields mengacu pada <field name>, yang bukan bidang DateTimeField, ForeignKey, atau ManyToManyField.

  • admin.E029: Nilai dari prepopulated_fields[<field name>] harus berupa daftar atau tuple.

  • admin.E030: Nilai dari prepopulated_fields mengacu pada <field name>, yang bukan sebuah atribut dari <model>.

  • admin.E031: Nilai dari ordering harus berupa daftar atau tuple.

  • admin.E032: Nilai dari ordering mempunyai pembuat urutan acak ?, tetapi mengandung bidang lain juga.

  • admin.E033: Nilai dari ordering mengacu pada <field name>, yang bukan sebuah atribut dari <model>.

  • admin.E034: Nilai dari readonly_fields harus berupa sebuah daftar atau tuple.

  • admin.E035: Nilai dari readonly_fields[n] adalah tidak callable, sebuah atribut dari <ModelAdmin class>, atau sebuah atribut dari <model>.

ModelAdmin

Pemeriksaan berikut dilakukan di setiap ModelAdmin yang terdaftar dengan situs admin:

  • admin.E101: Nilai dari save_as harus boolean.

  • admin.E102: Nilai dari save_on_top harus boolean.

  • admin.E103: Nilai dari inlines harus berupa sebuahd daftar atau tuple.

  • admin.E104: <InlineModelAdmin class> harus warisan dari BaseModelAdmin.

  • admin.E105: <InlineModelAdmin class> harus mempunyai atribut model.

  • admin.E106: Nilai dari <InlineModelAdmin class>.model harus berupa Model.

  • admin.E107: Nilai dari list_display harus berupa daftar atau tuple.

  • admin.E108: Nilai dari list_display[n] merujuk pada``<label>``, yang merupakan bukan callable, sebuah atribut dari <ModelAdmin class>, atau sebuah atribut atau metode di <model>.

  • admin.E109: Nilai dari list_display[n] harus tidak berupa bidang ManyToManyField.

  • admin.E110: Nilai dari list_display_links harus berupa daftar, tuple atau None.

  • admin.E111: Nilai dari list_display_links[n] mengacu pada <label>, yang tidak ditentukan di list_display.

  • admin.E112: Nilai dari list_filter harus berupa daftar atau tuple.

  • admin.E113: Nilai dari list_filter[n] harus warisan dari ListFilter.

  • admin.E114: Nilai dari list_filter[n] harus bukan warisan dari FieldListFilter.

  • admin.E115: Nilai dari list_filter[n][1] harus warisan dari FieldListFilter.

  • admin.E116: Nilai dari list_filter[n] mengacu pada <label>, yang bukan mengacu pada sebuah Bidang.

  • admin.E117: Nilai dari list_select_related harus berupa boolean, tuple atau daftar.

  • admin.E118: Nilai dari list_per_page harus berupa integer.

  • admin.E119: Nilai dari list_max_show_all harus berupa integer.

  • admin.E120: Nilai dari list_editable harus berupa sebuah daftar atau tuple.

  • admin.E121: Nilai dari list_editable[n] mengacu pada <field label>, yang bukan sebuah atribut dari <model>.

  • admin.E122: Nilai dari list_editable[n] mengacu pada <label>, yang tidak berisi di list_display.

  • admin.E123: Nilai dari list_editable[n] tidak dapat di kedua list_editable dan list_display_links.

  • admin.E124: Nilai dari list_editable[n] mengacu pada bidang pertama di list_display (<label>), yang tidak dapat digunakan meskipun list_display_links disetel.

  • admin.E125: Nilai dari list_editable[n] mengacu pada <field name>, yang tidak dapat disunting melalui admin.

  • admin.E126: Nilai dari search_fields harus berupa sebuah daftar atau tuple.

  • admin.E127: Nilai dari date_hierarchy mengacu pada <field name>, yang bukan sebuah atribut dari <model>.

  • admin.E128: Nilai dari date_hierarchy harus berupa DateField atau DateTimeField.

InlineModelAdmin

Pemeriksaan berikut dilakukan pada setiap InlineModelAdmin yang didaftarkan sebagai sebaris pada ModelAdmin.

  • admin.E201: Tidak dapat mengeluarkan bidang <field name>, karena itu adalah foreign key pada model induk <app_label>.<model>.

  • admin.E202: <model> tidak mempunyai ForeignKey pada <parent model>./ <model> mempunyai lebih dari satu ForeignKey pada <parent model>.

  • admin.E203: Nilai dari extra harus berupa integer.

  • admin.E204: Nilai max_num harus berupa integer.

  • admin.E205: Nilai min_num harus berupa integer.

  • admin.E206: Nilai dari formset harus warisan dari BaseModelFormSet.

GenericInlineModelAdmin

Pemeriksaan berikut dilakukan pada setiap GenericInlineModelAdmin yang didaftarkan sebagai berderet pada ModelAdmin.

  • admin.E301: 'ct_field' acuan <label>, yang bukan bidang di <model>.

  • admin.E302: 'ct_fk_field' acuan <label>, yang bukan bidang pada <model>.

  • admin.E303: <model> tidak mempunyai GenericForeignKey.

  • admin.E304: <model> tidak mempunyai GenericForeignKey menggunakan <field name> bidang jenis isi dan <field name> bidang ID obyek.

AdminSite

Pemeriksaan berikut dilakukan pada awalan AdminSite:

Sahih

  • auth.E001: REQUIRED_FIELDS harus berupa daftar atau rekaman.

  • auth.E002: Bidang bernama sebagai USERNAME_FIELD untuk model pengguna penyesuaian harus tidak disertakan di REQUIRED_FIELDS.

  • auth.E003: <field> harus unik karena itu dinamai sebagai USERNAME_FIELD.

  • auth.W004: <field> dinamai sebagai USERNAME_FIELD, tetapi itu tidak unik.

  • auth.E005: Nama kode perizinan <codename> bentrok dengan perizinan siap pakai untuk model <model>.

  • auth.E006: Nama kode perizinan <codename> digunakan untuk model <model>.

  • auth.E007: verbose_name dari model <model> harus berupa paling banyak 244 karakter untuk nama-nama perizinan siap pakainya menjadi paling banyak 255 karakter.

  • auth.E008: Perizinan bernama <name> dari model <model> tidak lebih panjang dari 255 karakter.

  • auth.C009: <User model>.is_anonymous harus berupa sebuah atribut atau sifat daripada sebuah metode. Mengabaikan ini adalah masalah keamanan ketika pengguna anonim akan diperlakukan sebagai terotentifikasi!

  • auth.C010: <User model>.is_authenticated harus berupa sebuah atribut atau sifat daripada sebuah metode. Mengabaikan ini adalah masalah keamanan ketika pengguna anonim akan diperlakukan sebagai terotentifikasi!

Tipe Konten

Pemeriksaan berikut dilakukan ketika sebuah model mengandung sebuah GenericForeignKey atau GenericRelation:

  • contenttypes.E001: ID obyek mengacu field <field> yang tidak-ada.

  • contenttypes.E002: Jenis isi GenericForeignKey mengacu field <field> yang tidak-ada.

  • contenttypes.E003: <field> bukan ForeignKey.

  • contenttypes.E004: <field> bukan ForeignKey pada contenttypes.ContentType.

Keamanan

Pemeriksaan keamanan tidak membuat situs anda aman. Mereka tidak memeriksa kode, melalui pengenalan gangguan, atau melakukan apapun khususnya yang rumit. Tentu saja, mereka membantu melakukan sebuah otomatis, daftar centang yang mudah dijangkau. Mereka membantu anda mengingat hal-hal sederhana yang meningkatkan keamanan situs anda.

Beberapa pemeriksaan ini mungkin tidak sesuai untuk konfigurasi penyebaran tertentu anda. Sebagai contoh, jika anda melakukan pengalihan HTTP ke HTTPS anda dalam sebuah penyeimbang beban, itu akan menjengkelkan terus-menerus diperingati mengenai tidak memiliki SECURE_SSL_REDIRECT diadakan. Gunakan SILENCED_SYSTEM_CHECKS untuk mendiamkan pemeriksaan yang tidak dibutuhkan

Pemeriksaan berikut berjalan jika anda menggunakan pilihan check --deploy:

  • security.W001: Anda tidak mempunyai django.middleware.security.SecurityMiddleware in your MIDDLEWARE/MIDDLEWARE_CLASSES jadi pengaturan SECURE_HSTS_SECONDS, SECURE_CONTENT_TYPE_NOSNIFF, SECURE_BROWSER_XSS_FILTER, dan :setting:`SECURE_SSL_REDIRECT`tidak akan mempunyai pengaruh.

  • security.W002: Anda tidak mempunyai django.middleware.clickjacking.XFrameOptionsMiddleware di MIDDLEWARE/MIDDLEWARE_CLASSES anda, jadi halaman anda tidak akan dilayani dengan sebuah kepala 'x-frame-options'. Meskipun ada alasan bagus untuk situs anda dilayani dalam sebuah kerangka, anda harus mempertimbangkan mengadakan kepala ini untuk membantu mencegah serangan clickjacking.

  • security.W003: Anda tidak tampak menggunakan perlindungan pemalsuan permintaan lintas-situs siap pakai Django melalui middleware (django.middleware.csrf.CsrfViewMiddleware tidak di MIDDLEWARE/MIDDLEWARE_CLASSES anda). Mengadakan middleware adalah pendekatan teraman untuk memastikan anda tidak meninggalkan lubang apapun.

  • security.W004: Anda belum menyetel sebuah nilai untuk pengaturan SECURE_HSTS_SECONDS. Jika keseluruhan situs anda hanya terhadap SSL, anda mungkin ingin mempertimbangkan pengaturan sebuah nilai dan mengadakan HTTP Strict Transport Security. Pastikan membaca dokumentasi dahulu; mengadakan HSTS tanpa bertanggung jawab dapat menyebabkan serius, masalah tidak dapat diubah.

  • security.W005: Anda belum menyetel pengaturan SECURE_HSTS_INCLUDE_SUBDOMAINS menjadi True. Tanpa ini, situs anda berpotensi rentan pada serangan melalui hubungan tidak aman ke subranah. Hanya setel ini menjadi True jika anda yakin bajwa semua subranah dari ranah anda harus dilayani secara khusus melalui SSL.

  • security.W006: Pengaturan SECURE_CONTENT_TYPE_NOSNIFF anda tidak disetel menjadi True, jadi halaman anda tidak akan dilayani dengan kepala 'x-content-type-options: nosniff'. Anda harus mempertimbangkan mengadakan kepala ini untuk mencegah peramban dari menciri jenis isi secara tidak benar.

  • security.W007: Pengaturan SECURE_BROWSER_XSS_FILTER anda disetel menjadi True, jadi halaman anda tidak akan dilayani dengan kepala 'x-xss-protection: 1; mode=block'. Anda harus mempertimbangkan mengadakan kepala ini untuk mengaktifkan penyaringan XSS peramban dan membantu mencegah serangan XSS.

  • security.W008: Pengaturan SECURE_SSL_REDIRECT anda tidak disetel menjadi True. Meskipun situs anda harus tersedia terhadap kedua hubungan SSL dan bukan-SSL, anda mungkin ingin antara menyetel pengaturan ini menjadi True atau konfigurasi sebuah penyeimbang muatan atau peladen membalikkan-proxy ke mengalihkan semua hubungan pada HTTPS.

  • security.W009: SECRET_KEY anda mempunyai kurang dari 50 karakter atau kurang dari 5 karakter unik. Harap bangkitkan sebuah SECRET_KEY panjang dan acak, jika tidak banyak dari fitur-fitur kritis-keamanan Django akan rentan pada serangan.

  • security.W010: Anda memiliki django.contrib.sessions di INSTALLED_APPS anda tetapi anda belum menyetel SESSION_COOKIE_SECURE menjadi True. Menggunakan kue sesi hanya-aman membuatnya lebih sulit untuk lalu lintas jaringan sapu tangan untuk membajak sesi pengguna.

  • security.W011: Anda mempunyai django.contrib.sessions.middleware.SessionMiddleware di MIDDLEWARE/MIDDLEWARE_CLASSES anda, tetapi anda belum menyetel SESSION_COOKIE_SECURE menjadi True. Menggunakan kue sesi hanya-aman membuatnya lebih sulit untuk lalu lintas jaringan sapu tangan untuk membajak sesi pengguna.

  • security.W012: SESSION_COOKIE_SECURE tidak disetel menjadi True. Menggunakan kue sesi hanya-aman membuatnya lebih sulit untuk lalu lintas jaringan sapu tangan untuk membajak sesi pengguna.

  • security.W013: Anda memiliki django.contrib.sessions di INSTALLED_APPS anda, tetapi anda belum menyetel SESSION_COOKIE_HTTPONLY menjadi True. Menggunakan kue sesi HttpOnly membuatnya lebih sulit untuk serangan penulisan lintas-situs untuk membajak sesi pengguna.

  • security.W014: Anda mempunyai django.contrib.sessions.middleware.SessionMiddleware di MIDDLEWARE/MIDDLEWARE_CLASSES anda, tetapi anda belum menyetel SESSION_COOKIE_HTTPONLY menjadi True. Menggunakan kue sesi HttpOnly membuatnya lebih sulit untuk serangan penulisan lintas-situs untuk membajak sesi pengguna.

  • security.W015: SESSION_COOKIE_HTTPONLY tidak disetel menjadi True. Menggunakan kue sesi HttpOnly membuatnya lebih sulit untuk serangan penulisan lintas-situs untuk membajak sesi pengguna.

  • security.W016: CSRF_COOKIE_SECURE tidak disetel menjadi True. Menggunakan kue CSRF hanya-aman membuatnya lebih sulit untuk lalu lintas jaringan sapu tangan untuk mencuri token CSRF.

  • security.W017: CSRF_COOKIE_HTTPONLY tidak disetel menjadi True. Menggunakan kue CSRF HttpOnly membuatnya lebih sulit untuk serangan penulisan lintas-situs untuk mencuri token CSRF.

  • security.W018*: Anda harus mempunyai DEBUG disetel ke True dalam menyebarkan.

  • security.W019: Anda mempunyai django.middleware.clickjacking.XFrameOptionsMiddleware di MIDDLEWARE/MIDDLEWARE_CLASSES anda, tetapi X_FRAME_OPTIONS tidak disetel menjadi 'DENY'. Awalan adalah 'SAMEORIGIN', tetapi meskipun ada alasan bagus untuk situs anda untuk melayani bagian lain dari itu sendiri dalam sebuah kerangka, anda harus merubah itu menjadi 'DENY'.

  • security.W020: ALLOWED_HOSTS harus tidak kosong dalam menyebarkan.

Situs

Pemeriksaan berikut dilakukan pada setiap model menggunakan CurrentSiteManager:

  • sites.E001: CurrentSiteManager tidak dapat menemukan sebuah bidang dinamai <field name>.

  • sites.E002: CurrentSiteManager tidak dapat menggunakan <field> karena itu adalah bukan foreign key atau bidang many-to-many.

Basisdata

MySQL

Jika anda sedang menggunakan MySQL, pemeriksaan berikut akan dilakukan:

  • mysql.E001: MySQL tidak mengizinkan CharFields unik mempunyai max_length > 255.

  • mysql.W002: MySQL Strict Mode tidak disetel untuk hubungan basisdata ‘<alias>’. Lihat juga Mengatur sql_mode.

Templat

Pemeriksaan berikut memeriksa bahwa pengaturan TEMPLATES anda dengan benar dikonfigurasi:

  • templates.E001: Anda mempunyai 'APP_DIRS': True di TEMPLATES anda tetapi juga menentukan 'loaders' di OPTIONS. Antara memindahkan APP_DIRS atau memindahkan pilihan 'loaders'.

  • templates.E002: string_if_invalid di setting:TEMPLATES OPTIONS harus berupa string tetapi mendapatkan: {value} ({type}).

Tembolok

Pemeriksaan berikut memeriksa bahwa pengaturan CACHES anda dengan benar dikonfigurasi:

  • caches.E001: Anda harus menentukan sebuah penyimpanan 'default' di pengaturan CACHES.

URL

Pemeriksaan berikut dilakukan di konfigurasi URL anda:

  • urls.W001: Corak <pattern> URL anda menggunakan include() dengan sebuah regex berakhir dengan sebuah $. Pindahkan dolar dari regex untuk menghindari masalah-masalah termasuk URL.

  • urls.W002: Corak <pattern> URL anda mempunyai regex diawali dengan sebuah /. Pindahkan garis miring ini ketika itu tidak dibutuhkan. Jika corak ini adalah disasar di sebuah include(), pastikan corak include() mempunyai buntutan /.

  • urls.W003: Corak <pattern> URL mempunyai name termasuk sebuah :. Pindahkan titik dua, untuk menghindari dua arti acuan namespace.

  • urls.E004: Corak <pattern> URL anda tidak sah. Pastikan bahwa urlpatterns adalah sebuah daftar dari instance url().