Bermanfaat untuk membatasi akses langsung file tema?

31

Saya telah menemukan potongan-potongan berikut dalam tema dari waktu ke waktu:

if ( ! defined('ABSPATH')) exit('restricted access');

Itu pada awal beberapa (semua?) File PHP dalam sebuah tema dan itu seharusnya mencegah akses langsung file tersebut oleh sumber jahat.

Saya melihat bahwa ini tidak termasuk dalam Twenty Ten atau Eleven dan saya belum pernah melihatnya direkomendasikan dalam dokumentasi WordPress resmi. Sepertinya ini ide yang bagus bagi saya, tetapi saya juga tidak cukup tahu tentang keamanan untuk menilainya dan tidak dapat menemukan banyak hal dengan Google.

Apakah ini sesuatu yang harus saya miliki dalam tema khusus saya? Jika demikian, apakah harus di semua file PHP atau hanya beberapa?

mrwweb
sumber
7
Hanya untuk pembaca nanti, ini bisa ditulis lebih pendek dan lebih bagus:defined('ABSPATH') OR exit;
kaiser
atau bahkan lebih pendek:: defined('WPINC') ? : die();P
Tim Elsass
Saya juga bertanya-tanya apakah ada baiknya memasukkan beberapa kode seperti ini hanya untuk menghindari melihat kesalahan PHP tentang fungsi yang tidak terdefinisi dalam log kesalahan saya. Bot tampaknya suka untuk langsung memukul file-file ini kadang-kadang dan saya mendapatkan kesalahan seperti 'Panggil ke fungsi query_posts ()' yang tidak terdefinisi karena WP bootstrap belum dimuat
Matt Keys

Jawaban:

26

Biasanya, Anda tidak membutuhkannya. Tapi ... setidaknya ada satu sisi tepi:

  • Jika file tema adalah bagian templat ,
  • dan menggunakan variabel global dari konteks panggilan (file induk),
  • dan register_globals adalah on,
  • dan itu hanya menggunakan variabel-variabel ini tanpa pemeriksaan keamanan ...

... seorang penyerang dapat memanggil file ini, mengatur variabel yang hilang dengan GETatau POSTdan membuat file tema mencetaknya. Dan kemudian ada adalah masalah keamanan.

Jadi ... pilihan terbaik bukanlah cek konteks seperti yang ada pada contoh Anda, tetapi kode yang baik: hindari variabel global, periksa kontennya sebelum Anda mencetaknya.

Dalam beberapa kasus saya menambahkan cek konteks ketika saya pikir orang lain akan menggunakan kode saya dan mengubahnya tanpa memikirkan keamanan. Tidak sakit.

fuxia
sumber
Jika bagian Templat masih berisi setidaknya satu panggilan fungsi yang akan menyebabkan kesalahan fatal PHP apakah skenario ini masih mungkin?
Chris_O
@ Chris_O Tergantung pada urutan penampilan.
fuxia
Masuk akal dan sepenuhnya menyetujui alasan lain untuk tidak menggunakan variabel global antara panggilan file.
Chris_O
1
Selalu lebih baik aman daripada menyesal. Terlalu banyak keamanan yang tidak ada salahnya, kan?
Sean Berg
2
Jika Anda melakukan semuanya dengan benar, Anda tidak harus menggunakan kode yang tidak diperlukan. Pertanyaan ini adalah bukti bahwa itu membuat kode lebih sulit untuk diikuti.
fuxia