Tema dosyalarına doğrudan erişimi kısıtlamakta fayda var mı?


31

Zaman zaman temalarda aşağıdaki snippet'i geçtim:

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

Bir temanın içindeki bazı (tümü?) PHP dosyalarının başında ve dosyanın gereksiz kaynaklardan doğrudan erişimini engellemesi gerekiyordu.

Bunun Yirmi On veya Onbirde bulunmadığını ve resmi WordPress belgelerinde tavsiye edildiğini hiç görmedim. Bana iyi bir fikir gibi geliyor, ama aynı zamanda güvenliği değerlendirmek için yeterince bilgim yok ve Google ile fazla bir şey bulamıyorum.

Bu benim özel temalarımda almam gereken bir şey mi? Eğer öyleyse, tüm PHP dosyalarında mı yoksa sadece bazılarında mı olmalı?


7
Sadece daha sonraki okuyucular için bu daha kısa ve daha iyi yazılabilir:defined('ABSPATH') OR exit;
kaiser

veya daha kısa:: defined('WPINC') ? : die();P
Tim Elsass

Ayrıca hata kodlarımda tanımsız işlevlerle ilgili PHP hatalarını görmemek için bunun gibi bir kod girmeye değer olup olmadığını merak ediyorum. Botlar doğrudan bazen bu dosyaları vurmak gibi görünüyor ve ben gibi hatalar 'tanımsız fonksiyon query_posts için Çağrı ()' get WP önyükleme yüklü değil çünkü
Mat Tuşlar

Yanıtlar:


26

Genellikle, ona ihtiyacınız olmaz. Ancak… en az bir tane sınır durumu var:

  • Bir tema dosyası bir şablon parçasıysa ,
  • ve çağrılan bağlamdaki genel değişkenleri kullanıyor (ana dosya),
  • ve register_globaller olduğu on,
  • ve sadece bu değişkenleri güvenlik kontrolü olmadan kullanıyor…

… Bir saldırgan bu dosyayı arayabilir, eksik değişkenleri GETveya ile ayarlayabilir POSTve tema dosyasının bunları yazdırmasını sağlayabilir. Ve sonra olan bir güvenlik sorunu.

Yani… en iyi seçenek, örneğinizdeki gibi bir içerik kontrolü değil, iyi kod: Global değişkenlerden kaçının, yazdırmadan önce içeriklerini kontrol edin.

Bazı durumlarda, başkasının kodumu kullanacağını ve güvenliği düşünmeden değiştireceğini düşündüğümde bağlam kontrolünü ekliyorum. Acıtmıyor.


Bir şablon parçası hala bir PHP ölümcül hatasına neden olacak en az bir işlev çağrısı içeriyorsa, bu senaryo hala mümkün müdür?
Chris_O

@Chris_O Görünüm sırasına bağlıdır.
fuxia

Dosya değişkenleri arasında global değişkenleri kullanmamak için bir neden daha mantıklı ve tamamen aynı fikirde.
Chris_O

1
Özür dilemekten daha güvenli olmak her zaman en iyisidir. Çok fazla güvenlik zarar veremez, değil mi?
Sean Berg

2
Her şeyi doğru yaparsanız, gerekmeyen kodu kullanmamalısınız. Bu soru, kodun takip edilmesini zorlaştırdığının kanıtıdır.
fuxia
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.