KompüterlərProqram təminatı

PHP bir funksiyada qlobal dəyişəndir. PHP-də qlobal dəyişiklik edin

Geniş funksiyaya sahib olan tam hüquqlu bir sayt yaratmaq üçün bu barədə çox şey bilmək lazımdır. Amma PHP-nin gerçək benzersizliyi nə verə bilər. Bu proqramlaşdırma dilində qlobal dəyişən çox vaxt istifadə edilmir, lakin bəzən bunun necə işlədiyini bilmək lazımdır. Nə və necə işlədiyini öyrənərək, bu məqaləni götürəcəyik.

Sahə

Bu, dəyişənin müəyyənləşdirildiyi kontekstin adıdır. Çox hallarda, onlar yalnız bir əhatə dairəsi var. PHP-də qlobal dəyişənlər digər fayllardan yükləndikdə, onda onlar (daxil) və tələb oluna bilər (tələb olunur).

Varsayılan olaraq, funksiyanın yerli əhatəsi ilə məhdudlaşır. Və dəyişənlərin öz sərhədləri xaricində olan fayllar tərəfindən necə görünməsini istəyirsiniz və onlar da istifadə edə bilərlər? Bunun üçün PHP də qlobal bir dəyişkən təmin edir.

"Qlobal" sözü

Qlobal PHP dəyişənini necə elan etmək olar? Bu məqsədə çatmaq üçün "qlobal" sözü bizə kömək edəcəkdir. Qlobal etmək istədiyiniz dəyişəndən əvvəl yerləşdirməlisiniz (məsələn, qlobal "Dəyişən").

Belə bir təlimatı tətbiq etdikdən sonra hər hansı bir məlumat məlumatlarla işləyə bilər. Bir yerlərdə bu dəyişənə istinadlar varsa, proqram həmişə qlobal versiyaya diqqət yetirəcəkdir.

Niyə belə bir qəribə formul? Əslində, eyni zamanda yerli versiyalar da ola bilər. Lakin onlar yalnız elan edilmiş fayllarda mövcud olacaqlar. Və hər kəs üçün, PHP sinifinin qlobal dəyişənləri işləyəcək. Buna görə diqqətli olmalısınız. Şübhə yoxdur ki, burada necə göründükləri bir nümunədir: qlobal a.

Çünki bir fayl bir neçə dəyişənə çıxış əldə edərsə, bu onların qarşıdurmasına səbəb olur. Ancaq burada dəqiq bir şey deyə bilmərəm - yerli və ya qlobal dəyişən oxunacaq və ya bir səhv ortaya çıxacaq. Beləliklə, bir funksiyaya yazıldığı təqdirdə, hər hansı bir problem olmayacaqdır. Ancaq sərhədlərindən kənarda bir dəyişən istifadə edərək problemli olacaq. Buna görə də proqram kodunun tərtib edilməsinin strukturunu yaxından izləmək və münaqişənin yaranması üçün heç bir şərt yoxdur.

Qeyd etmək üçün başqa bir seçimdir

Başqa bir şəkildə PHP-də qlobal dəyişən yaratmaq mümkündürmü? Bəli, hətta bir deyil. Birincisi, GLOBALS-a baxaq. Bu birləşmə arraydır. İçindəki əsas bir ad. Bu dəyər qlobal dəyişənin məzmunudur. Qeyd etmək lazımdır ki, bəyannamədən sonra bu array hər hansı bir sahədə mövcuddur. Bu, superglobal hesab etmək üçün əsas verir. Bu kimi görünür: $ GLOBALS ['Değişken'].

Predefined / superglobals

Hər bir proqramlaşdırma dilində, fərdi funksiyaları üçün nizamlanan bəzi adlar var. Buna görə, eyni adı olan PHP-də qlobal dəyişənlər yarada bilməzsiniz.

Bu proqramlaşdırma dilində xüsusi xüsusiyyətlər var. Beləliklə, vacibdir ki, əvvəlcədən təyin edilmiş dəyişənlərin burada "super" bir qəbulu yoxdur, yəni hər yerdə mövcud deyildir. Bunu necə düzəldə bilərəm? Əvvəlcədən müəyyən edilmiş bir dəyişənə bəzi yerli sahələrdə mövcud olmağı üçün aşağıdakı kimi elan edilməlidir: qlobal "dəyişkən". Daha əvvəl deyildiyi kimi eyni görünür? Doğru, lakin həqiqətən deyil. "Döyüş" misalına baxaq:

  • Global $ HTTP_POST_VARS;
  • Echo $ HTTP_POST_VARS ['adı'].

Onların arasındakı fərqi hiss edirsiniz? Qeyd edək ki, PHP-də qlobal dəyişən bir funksiyada istifadə edilməməlidir. Bu daxil olan bir faylda yerləşdirilə bilər.

Bağlantılar və təhlükəsizlik

Gördüyünüz kimi, PHP-də qlobal dəyişiklik yaratmaq problem deyil. Lakin əlaqələr haqqında hər hansı bir xüsusiyyət varmı? Bəli, qlobal istifadə edərkən gözlənilməz bir davranış ola bilər. Amma bundan əvvəl bir az arxa plan.

Sürüm 4.2.0'da, register_globals direktivi açıldığı zaman bağlıdır. Ən çox istifadəçilər üçün bu çox vacib deyil, amma boş yerə. Bütün bunlardan sonra, bu inkişaf edən məhsulun təhlükəsizliyini birbaşa təsir edir. Əgər qlobal dəyişikliyə ehtiyacınız varsa, bu parametrdə PHP direktivi birbaşa təsir etməyəcəkdir. Ancaq yanlış istifadənin təhlükəsizliyi üçün əvvəlcədən təyinatlar yarada bilər.

Belə ki, register_globals işə salındıqda, yazılı kodunu icra etməzdən əvvəl, müxtəlif dəyişənlər, məsələn, HTML formaları göndərmək üçün lazım olan dəyişikliklər hazırlanır. Ona görə də onu ləğv etmək qərarına gəldilər.

PHP-də bu direktivin dövləti bir çox səbəbə görə qlobal dəyişəndir? Əslində, dövlət qurulduqda, həmişə inkişaf edənlər həmişə olduğu yerdən soruşmaq üçün müstəqil şəkildə cavab verə bilmirlər. Bir tərəfdən kodu yazmağı asanlaşdırdı. Digər tərəfdən - bu təhlükəsizlik təhdidi yaratdı. Buna görə səhvlərin qarşısını almaq, məlumatları qarışdırmaq və direktivə əl qoyduq.

İndi təhlükəsiz olmayan kodu nəzərdən keçirək, həmçinin PHP-nin qlobal dəyişən bəyannaməsinin məlumatları təhrif etmək cəhdləri ilə müşayiət edildikdə halların necə aşkarlanacağını nəzərdən keçirək. Bu yalnız gözəl deyil, həm də rast gəlinən ilk şəxsin çatlamadığı sabit iş yerləri yaratmaq üçün lazımdır.

Təhlükəli kod

Dəyişənin səlahiyyətli olduqları üçün doğru olduğunu müəyyən edək:

Əgər (authenticate_user ()) {
$ Authorize = true;
}

Əgər ($ avtorizasiya) {
"/highly/sensitive/data.php" daxil edin;
}

Bu vəziyyətdə dəyişən avtomatik olaraq təyin edilə bilər. Məlumatların sadəcə əvəz edilə biləcəyini və mənşə mənbəyinin qurulmadığını nəzərə alsaq, hər hansı bir şəxs belə bir çekdən keçə bilər və başqasını təqlid edə bilər. İstədiyimiz zaman, təcavüzkar (və ya sadəcə maraqlı, amma təcrübəsiz) skriptin məntiqini poza bilər.

Direktivin dəyərini dəyişdirirsinizsə, bu kod lazım gəldikdə düzgün işləyə bilər. Lakin dəyişənlərin başlanğıcı proqramlaşdırmanın yalnız yaxşı bir səsi deyil, həm də bizə scriptin sabitliyinə təminat verir.

Kodun sağlam versiyası

Bu məqsədə nail olmaq üçün ya direktivin işini söndürə və ya daha kompleks bir kod qeydiyyatdan keçə bilərsiniz. Məsələn, burada:

Əgər (isset ($ _ SESSION ['username']))) {

Echo "Salam {$ _ SESSİYA ['istifadəçi adı']} ";

} Else {

Echo "Salam Qonaq
";
Echo "Salam, istifadəçi!";

}

Bu vəziyyətdə əvəz etmək çətin olacaq. Amma hələ də mümkündür. Bunu etmək üçün tez cavab alətlərinin təmin edilməsi üçün qayğı göstərilməlidir. PHP-də qlobal dəyişənləri daxil etmək istəyirsinizsə, aşağıdakı vasitəni istifadə edə bilərsiniz: dəyərin əldə edəcəyi aralığını bilsəyiksə, script onu bir xəritəçəkmə vasitəsilə yoxlayacaq şəkildə qeyd edə bilərik. Əlbəttə ki, bu da dəyərlərin dəyişdirilməsindən tam qorunmasına zəmanət vermir. Amma burada mümkün variantların axtarışı ciddi şəkildə çətinləşəcək.

Bir cəhd əvəzi tapır

Daha əvvəl yazdığınız şeyi necə başa düşdüyünüzü nəzərdən keçirək. PHP-də aşağıda göstərilən funksiyadakı qlobal dəyişənlərdən özünüzü elan etməlisiniz. Deyə bilərəm ki, bu, dərs mövzusunu öyrənmək üçün bir ev tapşırığı verməkdir. İşdə kodu:

Əgər (isset ($ _ COOKIE ['C_COOKIE'])) {
} Elseif (isset ($ _ GET ['C_COOKIE']) || isset ($ _ POST ['C_COOKIE'])) {

Mail ("administrarot@example.com", "Xəbərdarlıq, ssenarinin məlumatı gizlətmək və təhrif etmək üçün cəhd, $ _SERVER ['REMOTE_ADDR'];
Echo "Təhlükəsizliyi təhlükəyə məruz qaldı və ya bunu etməyə cəhd etdi." Administrator xəbərdar etdi ";
Çıxış;

} Else {
}
?>

Və indi bir izahat. C_COOKIE dəyişən etibarlı mənbədən bizə gəlir. Gözlənilən nəticəni tam yoxlamaq üçün, onun dəyərini yoxlayırıq və problemlər yarandıqda administratora xəbər verin. Heç bir şey olmasaydı, heç bir hərəkət edilməməlidir. Qeyd edək ki, register_globals direktivini sadəcə silmək kodunuzu təhlükəsiz etmir. Buna görə, skriptin istifadəçidən aldığı hər hansı bir dəyişən gözlənilən dəyər üçün yoxlanılmalıdır.

Nəticə

Ümumiyyətlə, qlobal dəyişənlər haqqında bilmək üçün lazım olan hər şeyi, onların fəaliyyətində uğurlu və təhlükəsiz istifadə etmək üçün. Əlbəttə ki, kimsənin istifadə edə bilməyəcəyi tam təminatlı bir zəmanət var - krakerlər daim üsullarını və bacarıqlarını artırırlar. Buna görə, kodu qlobal dəyişənlərin maksimum istifadə məhdudlaşdırmaq lazımdır. Xoşbəxtlikdən, bu proqramlaşdırma dilinin quruluşu və xüsusiyyətləri bu məqsədə nail ola bilər. Uğurlar!

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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