КомпютриСофтуер

PHP е глобална променлива във функция. Направете глобална променлива в PHP

За да създадете пълноправен сайт, който има широка функционалност, трябва да знаете много за него. Но това, което може да му даде истинска уникалност, е PHP. Глобалната променлива на този програмен език не се използва много често, но понякога е необходимо да се знае как работи. Чрез изучаване на това какво е и как работи, ние ще заемем тази статия.

обхват

Това е името на контекста, в който е дефинирана променливата. В повечето случаи те имат само един обхват. Когато в PHP глобалните променливи се зареждат от други файлове, то в тях те могат да бъдат включва (включват) и изискват (изискват).

По подразбиране те са ограничени до локалния обхват на функцията. И как искате променливата да се вижда от файловете извън нейните граници и биха могли да бъдат използвани и? За това PHP също осигурява глобална променлива.

Ключовата дума "глобална"

Но как да декларираме глобална PHP променлива? При постигането на тази цел думата "глобална" ще ни помогне. Трябва да я поставите преди променливата, която искате да направите глобална (например глобална "Променлива").

След изпълнението на такава инструкция всеки файл може да работи с данните. Ако някъде има препратки към тази променлива, тогава програмата винаги ще обръща внимание на глобалната версия.

Защо такава странна формула? Факт е, че едновременно с това може да има и локални версии. Но те ще бъдат достъпни само в тези файлове, където са декларирани. И за всички останали, глобалните променливи на PHP класа ще работят. Ето защо трябва да внимавате. И така, че няма съмнение, ето един пример за това как те изглеждат: глобално a.

Защото ако един файл има достъп до няколко променливи, това ще доведе до конфликт. Но тук не можем да кажем точно - ще бъде прочетена местна или глобална променлива или ще възникне грешка. Така че, ако е написана във функция, тогава не би трябвало да има никакви проблеми. Но използването на променлива извън нейните граници ще бъде проблематично. Следователно е необходимо да се следи отблизо структурата на съставянето на програмния код и да се гарантира, че никъде няма дори предпоставки за възникване на конфликта.

Друга възможност за запис

Възможно ли е да се създаде глобална променлива в PHP по друг начин? Да, и дори не един. Първо, да разгледаме $ GLOBALS. Това е асоциативен масив. Ключът в него е име. Стойността е съдържанието на глобалната променлива. Следва да се отбележи, че този масив след декларацията съществува във всеки обхват. Това дава основания да го считаме за суперглобално. Тя изглежда така: $ GLOBALS ['Променлива'].

Предварително дефинирани / суперглобали

Във всеки програмен език има някои имена, които са наети за своите индивидуални функции. Следователно, не можете да създавате глобални променливи в PHP със същото име.

В този програмен език има специални функции. И така, важно е, че предварително дефинираните променливи тук нямат "супер" настройка, т.е. те не са на разположение на всички места. Как мога да поправя това? За да може дадена предварителна променлива да бъде налична в някои локални пространства, тя трябва да бъде обявена както следва: глобална "Променлива". Изглежда, че е същото като преди, нали? Вярно, но не и наистина. Нека да разгледаме примера "бой":

  • Глобални $ HTTP_POST_VARS;
  • Echo $ HTTP_POST_VARS ['име'].

Чувствате ли разликата между тях? Имайте предвид, че в PHP глобалната променлива не трябва да се използва в рамките на дадена функция. Той може да се намира във файл, който е включен в него.

Връзки и сигурност

Както можете да видите, в PHP, създаването на глобална променлива не е проблем. Но има ли някакви функции за връзките? Да, може да има неочаквано поведение, когато се използва глобално. Но преди това малко фон.

Във версия 4.2.0 директивата register_globals бе променена по подразбиране от изключено на включено. За повечето потребители това не е много важно, но напразно. В крайна сметка това пряко засяга безопасността на разработвания продукт. Ако трябва да направите глобална променлива, директивата PHP за този параметър няма да го повлияе пряко. Но неправилната употреба вече може да създаде прецеденти за сигурност.

Така че, ако register_globals е включен, преди да изпълни писмения код, се инициализират различни променливи, които са необходими, например, за изпращане на HTML формуляри. Следователно беше решено да го изключите.

Защо състоянието на тази директива в PHP е глобална променлива, дължаща се на много? Факт е, че когато държавата е в действие, разработчиците не винаги са в състояние самостоятелно да отговорят на въпроса откъде идват. От една страна, тя улесни писането на кода. Но от друга - това създаде заплаха за сигурността. Следователно, за да се избегнат грешките, както и смесването на данните и директивата бяха деактивирани.

И сега нека разгледаме несигурния код, а също така и как да открием случаи, когато декларирането на глобалната променлива на PHP е придружено от опити за фалшифициране на данни. Това е необходимо, за да се създадат не само красиви, но и стабилни работни сайтове, които не пробиват първия човек, който се намира.

Опасен код

Нека да установим, че променливата е вярна за онези, на които е разрешено:

Ако (authenticate_user ()) {
$ Authorize = true;
}

Ако ($ authorize) {
Включете "/highly/sensitive/data.php";
}

В това състояние променливата може да бъде зададена автоматично. Като се има предвид, че данните могат просто да бъдат заменени и източникът на техния произход не е установен, тогава всяко лице може да премине такава проверка и да се представя за някой друг. По желание нападателят (или просто любопитен, но неопитен човек) може да наруши логиката на сценария.

Ако промените стойността на директивата, тогава този код може да работи правилно, както се нуждаем. Но инициализирането на променливи е не само добър тон в програмирането, но и дава някои гаранции за стабилност на сценария.

Здрава версия на кода

За да постигнете тази цел, можете или да изключите действието на директивата, или да регистрирате по-сложен код. Например, тук е следното:

Ако (isset ($ _ SESSION ['username']))) {

Echo "Здравейте, {$ _ SESSION ['username]}} ";

} Друга {

Echo "Здравейте Гост
";
Ехо "Здравей, потребител!";

}

В този случай ще бъде трудно да се направи замяна. Но все пак е възможно. За тази цел трябва да се внимава да се гарантира, че са осигурени инструменти за бърза реакция. Ако искате да включите глобални променливи в PHP, можете да използвате следния инструмент: ако знаем диапазона, в който ще бъде получена стойността, можем да го регистрираме, така че скриптът да провери това, като използва картографиране. Разбира се, това също не гарантира пълна защита срещу заместването на ценностите. Но тук търсенето на възможни варианти значително ще се усложни.

Открива опит за замяна

Нека проверим как сте разбрали това, което сте написали по-рано. В PHP глобалните променливи във функцията, която ще бъде предоставена по-долу, ще трябва да декларирате себе си. Може да се каже, че това по някакъв начин е задача за домашна работа, за да научите темата на урока. Ето кода:

Ако (isset ($ _ COOKIE ['C_COOKIE'])) {
($ _ GET ['C_COOKIE']) || isset ($ _ POST ['C_COOKIE'])) {

Поща ("adminarot@example.com", "Предупреждение, скриптът записва опит за изкривяване и измама на данни, $ _SERVER ['REMOTE_ADDR']);
Echo "Сигурността е била компрометирана или е направена опит за това." Администратор уведомява ";
изход;

} Друга {
}
?>

И сега обяснение на това. Променливата C_COOKIE идва от надежден източник. За да проверим напълно очаквания резултат, проверяваме неговата стойност и в случай на проблеми уведомява администратора за него. Ако не е дошло нищо, не трябва да се предприемат никакви действия. Трябва да се разбере, че просто изключването на директивата register_globals не прави вашия код сигурен. Следователно всяка променлива, която скриптът получава от потребителя, трябва да бъде проверена за очакваната стойност.

заключение

Това като цяло и всичко, което е необходимо да знаете за глобалните променливи, за да ги използвате успешно и безопасно в техните дейности. Разбира се, да се каже, че има пълна гаранция, че никой не може да я използва - бисквитите постоянно подобряват своите методи и умения. Поради това е желателно да се ограничи използването на глобалните променливи в кода до максимум. За щастие, структурата и характеристиките на изграждането на този програмен език могат да постигнат тази цел. Успех!

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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