BilgisayarlarYazılım

Işlevinde PHP küresel değişkeni. PHP global bir değişken yapın

Eğer bir şey biliyorum katılması gereken önemli işlevlere sahiptir tam site yaratmak. Ama onu gerçekten eşsiz ne yapabilir - bu PHP'dir. programlama dilinde genel değişken çok sık kullanılmaz, ama bazen nasıl çalıştığını bilmek, bazen gereklidir. Yani öyle ve nasıl çalıştığını, biz bu makalede yapacağız ne çalışmadır.

kapsam

Yani değişken ve kararlı bağlamı diyoruz. Çoğu durumda, sadece tek kapsamı var. PHP küresel değişkenler diğer dosyaları yüklenen zaman, o zaman kapsayıcı (dahil) ve gerekli olabilmektedir (gerekir).

Varsayılan olarak, yerel fonksiyon kapsamı ile sınırlıdır. Ve nasıl daha hangi kullanabilirsiniz, kendi sınırları içinde değişken görülen dosyaların yapılır? Bu amaçla, ve PHP küresel değişkenler sağlanmaktadır.

Anahtar kelime "global"

Ve burada bir genel değişken PHP ilan etmek nasıl? Bu hedefe ulaşmak için "küresel" Bize sözcüğü yardımcı olacaktır. Bir küresel (narimer, küresel «Değişken") yapmak istiyorum değişkenin önüne yerleştirmek için gereklidir.

Böyle bir göstergesi uygulanması sonra, veri herhangi bir dosya ile çalışmak mümkün olacak. yere bu değişkene referanslar varsa, programı her zaman küresel sürümüne dikkat edecektir.

Neden böyle garip bir dil? Aslında aynı anda yerel versiyonları olabileceğini. Ama açıkladı bu dosyalar için özel olarak satışa sunulacak. Ve tüm geri kalanı için küresel değişkenler PHP sınıfını hareket edecektir. Bu nedenle dikkatli olmak gerekir. Küresel a: Ve hiç kuşku yok olduğunu, burada neye benzediklerini gösteren bir örnek.

Bir dosya bir dizi değişkene erişebilir Çünkü eğer onları çakışabilir neden olacaktır. yerel veya genel değişken başarısız tamamen okumak veya - kesin Ama biz diyemeyiz. Bir işlevinde kayıt Yani, eğer, bu sorun olmamalıdır. Ama kendi sınırları için bir değişken kullanımı sorunlu olması. Bu nedenle, hiçbir yerde olmadığı yakından izlemek ve emin olmak için gerekli kod hazırlanması yapısı bile söz konusu çatışmanın bir ön koşul ortaya çıktı.

Kaydın bir başka düzenlemesi,

PHP içinde başka bir şekilde küresel bir değişken oluşturmak mümkün mü? Evet, bir tane bile. İlk olarak, $ GLOBALS düşünelim. Bu, birleştirici bir dizidir. Bunun anahtarı - adıdır. İçindekiler değeri global değişken olarak görür gibi. Açıklamanın ardından dizi her etki alanında mevcut olduğunu belirtmek gerekir. Bu Süper küresel inanmak için neden verir. O kadar görünür: $ GLOBALS [ 'değişken'].

Önceden tanımlı / superglobals

Her programlama dilinde onun bazı fonksiyonları için kiralanırlar bazı isimler vardır. Bu nedenle, işe yaramaz aynı adı PHP küresel değişkenlerde oluşturun.

Bu programlama dili kendine has özellikleri vardır. Yani, burada önceden tanımlanmış değişkenler, "süper" yüklemeden değildir yani, bunlar her yerde mevcut değildir önemlidir. Bunu nasıl düzeltebilirim? Önceden tanımlanmış değişkenler bazı yerel alanda kullanılabilir için şöyle :. Küresel «Değişken, bu" ilan edilmelidir Doğru, daha önce söylediğim gibi aynı görünüyor? Bu ama tam değil doğrudur. Bize zaten bir örnek "mücadele" bakalım:

  • Küresel $ HTTP_POST_VARS;
  • $ HTTP_POST_VARS [ 'adını'] echo.

Sen aralarındaki farkı hissetmek? PHP küresel değişkenlerde mutlaka işlev içinde kullanılmak zorunda olmadığını unutmayın. Hatta onun içinde yer alır bir dosyada yerleştirilebilir.

Bağlantılar ve güvenlik

Gördüğünüz gibi, PHP global bir değişken bir sorun değildir oluşturun. Ama herhangi bir göreli bağlantılar var mı? Küresel kullanırken Evet, beklenmeyen davranışlara olabilir. Ama bundan önce, biraz backstory.

sürümünde 4.2.0 yılında varsayılan register_globals tarafından direktif üzerine durumdan kapalı olarak değiştirdi. Çoğu kullanıcı için bu çok önemli, ama boşuna değildir. Sonuçta, doğrudan geliştirilen ürünün güvenliğini etkiler. Eğer yapmanız gerekiyorsa bu parametre üzerinde değişken küresel PHP-yönergesi doğrudan etkilenmez. Ancak, yanlış kullanım zaten emsal güvenliği oluşturabilirsiniz.

örnek HTML formları göndermek için yazılmış kod yürütme, gerekli olan farklı değişkenleri başlatıldı önce Yani Register_globals, açıksa. Bu nedenle, bunu kapatmak için karar verildi.

Neden php genel değişken bu direktifin devlet çok şey borçludur nedir? Aslında geliştiricilerin durumu kesin olarak her zaman değil ne zaman kendilerini nereden geldiğini sorusuna cevap verebilir olmasıdır. Bir yandan, kod yazmak daha kolaydır. Ama diğer taraftan - bu bir güvenlik riski oluşturuyor. Bu nedenle, karıştırma hataları yanı sıra veri önlemek ve direktif devre dışı bırakılmıştır.

Şimdi değil / güvenli kodu, hem de nasıl küresel PHP değişkenin duyuru bilgilerin değiştirilmesini girişimlerine eşlik vakaları tespit etme bakalım. Bu sadece güzel yaratmak için gerekli olan, ama aynı zamanda giderek ilk kullanılabilir kişiyi çatlak olmayan siteleri çalışma.

zararlı kod

en yani değişken yetkilendirilmiş olanlar için geçerlidir belirleyelim:

Eğer (authenticate_user ()) {
$ Yetkilendirme = true;
}

if ($ authorize) {
"/highly/sensitive/data.php" yer alır;
}

Bu durumda, değişken otomatik olarak ayarlanabilir. veri kolayca değiştirilebilir ve bunların menşei, kaynak ayarlanmamış olduğunu düşünürsek, o zaman kimse böyle bir testi geçmek ve bir başkası gibi davranmak olabilir. İstenirse, saldırgan (veya sadece merak ama deneyimsiz kişi), mantığımızı bozulabilir.

Biz yönergenin değerini değiştirirseniz biz gerektiği gibi, bu kod, düzgün çalışacaktır. Ama değişkenlerin başlatma programlamada sadece iyi bir sesi değil, aynı zamanda Senaryonun istikrar belli bir teminat verir.

kod Güvenilir versiyonu

Kapatmak veya direktifleri çalışmak veya bu hedefe ulaşmak için daha karmaşık bir kod yazabilir. Örneğin, bu gibi:

if (isset ($ _ SESSION [ 'kullanici'])) {

Yankı "Merhaba {$ _ SESSION [ 'kullanici']} ";

} Başka {

Yankı "Merhaba Misafir
";
"Hoşgeldin kullanıcıyı!" Echo;

}

Bu durumda bir değişiklik, zor olacaktır. Ama yine de - mümkün. Bunu yapmak için, hızlı tepki araçları sağlandı özen göstermelidir. PHP global değişkenleri eklemek istiyorsanız, aşağıdaki araçları kullanabilirsiniz: Biz aralığı elde edilen değer ne olduğunu, eğer bir maç ile bu kontrol etmek için bir komut dosyası kayıt etmek mümkündür. Tabii ki, bu da ikame değerlerine karşı tam koruma garanti etmez. Ama bu çok fazla seçenek anlamlı zorlaştırmak var.

maskeli girişimleri bulur

Diyelim ki daha önce yazılı anlamak görelim. PHP aşağıda verilecektir fonksiyonundaki küresel değişkenler, kendini ilan etmek gerekecektir. Bu ders konunun asimilasyon ödev bir tür olduğunu söyleyebiliriz. İşte kod:

if (isset ($ _ COOKIE [ 'C_COOKIE'])) {
} Elseif (isset ($ _ GET [ 'C_COOKIE']) || isset ($ _ POST [ 'C_COOKIE'])) {

posta ( "administrarot@example.com", "Dikkat, senaryo hırsızlık girişimi ve bilgilerin değiştirilmesini kaydedildi", $ _SERVER [ 'REMOTE_ADDR']);
"Kırık bir güvenlik vardı ya bunu Yönetici haberdar çalışırlar." Echo;
çıkış;

} Başka {
}
?>

Şimdi açıklama buna. Kısmen C_COOKIE Güvenilir bir kaynaktan bize gelir. Tamamen beklenen sonucuna göre memnun etmek için, biz onun değerini kontrol ve sorunlar durumunda yöneticisini haberdar. o gelmezse, herhangi bir işlem yapmaya gerek yoktu ve. Sadece register_globals yönergesi kodunuzu güvenli yapmaz devre dışı olduğunu anlamak zorundayız. Bu nedenle, kullanıcıdan bir komut dosyası alan tüm değişken, beklenen değer için kontrol edilmelidir.

Sonuç

Burada, genel olarak ve her şey başarıyla ve güvenle işlerinde kullanmaya küresel değişkenleri hakkında bilmek gerekir. Saldırganlar sürekli onların yöntemlerini ve becerilerini geliştiriyoruz - Tabii ki, hiç kimse onları olamaz kullanacağı tam garanti olduğunu söylemek. Kodda küresel değişkenlerin maksimum kullanımını sınırlamak için arzu edilir. Neyse ki, bu programlama dilinin yapısı ve tasarım özellikleri bu hedefe ulaşabilirsiniz. İyi şanslar!

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 tr.delachieve.com. Theme powered by WordPress.