PHP - register küresellerle kapatarak, kodu sabitleme hakkında gitmek için en iyi yolu nedir?

2 Cevap

Ben programcılar register_globals her zaman açık olacağı varsayılmıştır bir eski kod tabanının, üzerinde çalışıyorum. Bu nedenle değişkenler, $ _GET veya $ _POST önek olmaksızın kullanılan hemen hemen her sayfasında (kod tabanı büyük, komut yüzlerce) vardır. Ben kapatarak denedim, ama ilk komut (login script) sonsuz bir döngüye gider.

Ben bir anda bir anda bir komut ve bir satır geçiyor ve değişkenleri sabitleme (vaka olarak önek $ _GET veya $ _POST ekleme olabilir) muhtemelen tek seçenek olduğunu anlıyoruz. Herkes önce bunu yapar mı? Bunu yapıyor hakkında nasıl gitti? Herhangi bir tavsiye?

2 Cevap

Bu yarardan fazla zarar görmesine neden olabilir ama:

  1. Grep CSV ya da çizgi liste şey ayrılmış ve almak içine formları name="foo" elemanlarının dışarı action niteliği (gerçek bir komut ile ilgilidir sadece)
  2. CSV ya da hat-ayrılmış listesi geçmesi ve bir bulurum ve $ _POST ['currentVal'] / $ _GET ['currentVal'] veya $ _REQUEST ['currentVal'] ile $ currentVal yerine sed kullanarak değiştirin (ama çerezleri dikkat)

örneğin:

grep -o -E "(action|name)=\"[a-zA-Z0-9_]+\"" formfile.php | sed -E "s/.*\"([a-zA-Z0-9_]+)\"/\\1/" > vars.list

Size gönderilen değişkenleri (imsi) bir çizgi ayrılmış listesini verecek bir bash komut dosyası veya değişkenler yerine bir şey döngü olabilir.

EDIT

Eğer bir site için kayıt küresellerle açmak istiyorum. Lütfen .htaccess veya Apache yapılandırma ekle:

php_value register_globals "On"

Sen register_globals aşağıdaki kodu kullanarak çoğaltabilirsiniz:

foreach ($_REQUEST as $var => $val) $$var = $val;

Yapmanız gereken tek şey, her komut önce çalıştırın bu hat için bir yol bulmak. Siz bir dizi yolla yapabilirsiniz:

  1. Kopyala ve her dosyanın başlangıcına yapıştırın;
  2. mod_rewrite her bir talebi çevirmek gibi bir şekilde kullanılması (örneğin) register_globals.php?forward_to=originally_request_file.php burada register_globals.php Yukarıdaki hattı reklam ardından {[(3) da içerir }] dosyası;
  3. Bu normal olurdu her dosyayı çalıştırılmadan önce, belirli bir komut dosyasını çalıştırmak için PHP yapılandırmasında bir yönerge auto_prepend_file vardır. Bunu içinde Yukarıdaki satırda ile bir dosyaya işaret olabilir. Daha fazla: http://php.net/auto-prepend-file

Dahası noktasına (3), aşağıdaki gibi .htaccess dosyasında kurabilirsiniz:

php_value auto_prepend_file /var/www/register_globals.php