PHP kullanarak dosyaları yazma güvenlik etkileri

3 Cevap php

Şu anda tamamen eğitim yararına, PHP kullanarak bir CMS oluşturmak için çalışıyorum. Ben yöneticileri PHP scriptinizi tabi ki yükü önlemek için saf HTML biçiminde ayrıştırılır ve sunucu depolama kaydedilir içerik oluşturmak mümkün istiyorum. Ne yazık ki, ben sadece bunu yapmanın birkaç yolu düşünebiliriz:

  • CMS bir dosyayı yazmak istesin her dizinde yazma izni ayarlama. Bu oldukça kötü bir fikir gibi geliyor.
  • Tek bir cached dizinine yazma izinlerini ayarlama. Bir PHP komut verebilecek ardından include veya istek-zaman cached dizininde bir dosyadan fopen/fread/echo içerik. Bu belki de bir Mediawiki-vari bir şekilde yürütülen olabilir: gibi bir şey index.php?page=xyz zamanında cached/xyz.html okuyabilir ve yankı içerik olabilir. Ancak, $_GET['page'] index.php?page=http://www.bad-site.org/malicious-script.js gibi kötü varyasyonları önlemek amacıyla aklı sağlamak gerekir.

Ben şahsen çok ikinci fikri ile heyecan değilim, ama ilki çok güvensiz geliyor. Birisi bu yapılan almanın iyi bir yolu önermek misiniz?

EDIT: Ben veritabanından getiriliyor veri lehine değilim. Içerik önbelleğe alındığında ben veritabanından veri almak isterim sadece zaman olacaktır. İkincisi, ben memcached erişimi veya herhangi bir PHP hızlandırıcı yok.

3 Cevap

Eğer bir CMS bina konum olduğundan, kullanıcı ziyaretçilerine kötü şeyler yapmak istiyorsa, çok büyük olasılıkla can olduğunu kabul etmek gerekir. Yani ne olursa olsun içerik depolamak nerede doğrudur.

Kamu sitesi tüm statik içeriği ise, CMS doğrudan dosyaları yazmak icar ile yanlış bir şey yok. Ancak, CMS tarafından herhangi bir dizin yazılabilir şey yürütmek değil web sunucusunu yapılandırmak isteyeceksiniz.

Eğer veritabanını her zaman vurmak istemiyorum bile, veritabanı okur aza indirmek için bir önbellek kurabilirsiniz. Zend_Cache, bu için çok güzel bir şekilde çalışır ve oldukça etkili, tek başına bir bileşeni olarak da kullanılabilir.

Bir veritabanındaki sayfaları koymak ve parametreli SQL sorguları kullanarak onları almak gerekir.

Ben ikinci seçeneği ile gitmek ama çok dosyalar mod_rewrite'ın ziyade özel bir php fonksiyonu kullanılarak alınır değiştirmek istiyorum.