מחשביםתוכנה

משתנה גלובלי PHP בפונקציה. הפוך משתנה גלובלי ב- PHP

כדי ליצור אתר מלא, הכולל פונקציונליות רחבה שאתם צריכים לדעת הרבה. אבל מה יכול לגרום לו באמת ייחודי - היא PHP. המשתנה הגלובלי בשפת תכנות אינו משמש לעתים קרובות מאוד, אבל לפעמים לדעת איך זה עובד, לפעמים זה הכרחי. זהו המחקר של מה זה ואיך זה עובד, אנחנו הולכים לעשות במאמר זה.

היקף

אז קורא את ההקשר שבו המשתנה וקבע. ברוב המקרים, יש להם היקף יחיד. כאשר משתנה הגלובלי PHP טעון מקבצים אחרים, אז זה יכול להיות כלול (כולל) ונדרש (דורש).

כברירת מחדל, הם מוגבלים בטווח הפונקציה המקומי. ואיך להפוך קבצים משתנים לראות את גבולותיו, אשר יכול יותר להשתמש? לשם כך, והוא מסופק משתנה הגלובלי PHP.

מילת המפתח "גלובלי"

והנה היא איך מכריזים על משתנה גלובלי ל- PHP? בהשגת מטרה זו תסייע לנו את המילה "הגלובלי". יש צורך למקם מול המשתנה שאתה רוצה לעשות עולמי (narimer, הגלובלי «המשתנה").

לאחר יישום אינדיקציה כזו, הנתונים יוכלו לעבוד עם כל קובץ. אם איפשהו יש אזכור של משתנה זה, התכנית תמיד תשים לב על הגרסה הגלובלית.

למה שפה מוזרה כזאת? העובדה באותו זמן ייתכנו גרסאות מקומיות. אבל הם יהיו זמינים באופן בלעדי עבור קבצים אלה שבם הודיעו. ובשביל כל שאר תפעל משתנים גלובליים בכיתה PHP. לכן אתה חייב להיות זהיר. וזה לא היה ספק, הנה דוגמא למה הם נראים כמו: גלובלי.

כי אם יהיה קובץ אחד גישה למספר משתנה, זה יגרום להם להתנגש. אבל אנחנו לא יכולים לומר בוודאות - משתנה מקומי או גלובלי הוא לקריאה או לגמרי נכשל. אז, אם הוא רוצה להירשם פונקציה, זה צריך להיות שום בעיה. אבל השימוש משתנה עבור גבולותיה להיות בעייתי. לכן, את המבנה של ניסוח הקוד הדרוש כדי לפקח מקרוב ולוודא כי בשום מקום אין אפילו תנאים הכרחיים כדי עימות אמר התעוררו.

התגלמות נוספת של ההקלטה

האם אפשר ב- PHP כדי ליצור משתנה גלובלי בדרך אחרת? כן, אפילו לא אחד. ראשית, הבה נבחן את GLOBALS $. זהו מערך אסוציאטיבי. המפתח זה - הוא שם. ככל שערך את התוכן מעשים כמשתנה גלובלי. יצוין כי המערך לאחר ההכרזה קיים בכל היקף. זה נותן סיבה להאמין שזה superglobal. זה נראה כך: $ GLOBALS [ 'משתנה'].

מראש / superglobals

בכל שפת תכנות יש כמה שמות כי הם שכרו עבור חלק מהפונקציות שלה. לכן, כדי ליצור משתנים גלובליים PHP באותו שם לא יעבוד.

יש שפת תכנות זו מאפיינים משלה. אז, חשוב כי המשתנים מוגדרים מראש כאן אינם התקנה "סופר", כלומר, הם אינם זמינים בכל המקומות. איך אני יכול לתקן את זה? למשתנים מוגדרים מראש היו זמינים בכמה מקומי, זה חייב להיות הכריז כדלקמן :. עולמי משתנה «" זה נראה זהה אמר לפני, נכון? זה נכון, אבל לא לגמרי. הבה נבחן כבר "נלחמים" דוגמה:

  • $ העולמי HTTP_POST_VARS;
  • echo $ HTTP_POST_VARS [ 'name'].

אתה מרגיש את ההבדל ביניהם? שים לב משתנים גלובליים PHP לא בהכרח צריך לשמש בתוך פונקציה. זה יכול אפילו להיות ממוקם קובץ כלול בו.

קישורים ובטיחות

כפי שאתה יכול לראות, ב- PHP ליצור משתנה גלובלי אינו מהווה בעיה. אבל האם יש קישורים יחסיים בפרט? כן, ייתכנו התנהגות לא צפויה בעת השימוש העולמי. אבל לפני זה, סיפור רקע מעט.

בגרסה 4.2.0 ההוראה ידי register_globals כברירת מחדל השתנתה מ- על-המדינה לסירוגין. עבור רוב המשתמשים, זה לא חשוב מאוד, אך לשווא. אחרי הכל, זה משפיע ישירות על הביטחון של המוצר שפותח. אם אתה צריך לעשות את הגלובלי, PHP-הוראה משתנה על פרמטר זה אינו מושפע ישירות. עם זאת, שימוש לא נכון כבר יכול ליצור ביטחון תקדימים.

אז אם register_globals מופעלת, לפני ביצוע הקוד שנכתב אותחל המשתנים השונים כי יש צורך, למשל לשלוח-טופסי HTML. לכן, הוחלט לבטל אותה.

מדוע המדינה בהוראה זו משתנית הגלובלי PHP חייבת הרבה? העובדה היא שכאשר המדינה של מפתחים לא תמיד בוודאות יכול עצמם עונים לשאלה מאיפה זה הגיע. מצד אחד, קל יותר לכתוב קוד. אבל מצד שני - זה סיכון ביטחוני. לכן, כדי למנוע טעויות, כמו גם נתוני ערבוב הוראת הושבה.

עכשיו בואו נסתכל לא / קוד מאובטח, וכן כיצד לזהות מקרים בהם ההכרזה של משתנה PHP העולמי מלווה ניסיונות חבלה עם נתונים. הדבר נחוץ כדי ליצור לא רק יפה, אלא גם בהתמדה עובד אתרים שאינם לפצח את האדם הראשון זמין.

קוד זדוני

בואו נגדיר משתנים זה נכון עבור מי הוסמך:

אם (authenticate_user ()) {
על הרשה $ = true;
}

אם (Authorize $) {
כולל "/highly/sensitive/data.php";
}

במצב דברים זה, משתנה יכול להיות מוגדר באופן אוטומטי. בהתחשב בכך את הנתונים יכולים להיות מוחלפים פשוט, ואת מקור מוצאם אינו מוגדר, אז כל אחד יכול לעבור מבחן כזה ולהעמיד פנים שהוא מישהו אחר. אם תרצה, התוקף (או סתם אדם סקרן אבל לא מנוסה) עלולה להיפגע, ההיגיון שלנו.

אם נשנה את הערך של ההוראה, את הקוד הזה יעבוד כראוי, כפי שאנו נדרשים. אבל האתחול של משתנים לא רק צליל טוב בתכנות, אלא גם נותן לנו ערובה מסוימת של היציבות של התסריט.

גרסה אמינה של הקוד

אתה יכול לכבות או לעבוד הנחיות, או לקבוע קוד מורכב יותר כדי להשיג את המטרה הזאת. לדוגמה, ככה:

אם (isset ($ _ SESSION [ 'username'])) {

הד "שלום {$ _ SESSION [ 'username']} ";

} Else {

הד "שלום אורח
";
הד "משתמש ברוכים הבאים!";

}

לבצע חילוף במקרה זה, יהיה קשה. אבל עדיין - אפשרי. כדי לעשות זאת, אתה חייב לדאוג שכלי התגובה המהירים נמסרו. אם אתה רוצה לכלול משתנים הגלובליים ב- PHP, אתה יכול להשתמש בכלים הבאים: אם אנחנו יודעים מה הטווח הוא הערך המתקבל, אפשר לרשום סקריפט כדי לבדוק את זה עם משחק. כמובן, זה גם לא מבטיח הגנה מלאה כנגד ערכי החלפה. אבל זה גם אפשרויות הרבה לסבך משמעותי.

מוצא ניסיונות להתחזות

בואו לראות איך אתה מבין שנכתב קודם לכן. בשנת PHP משתנה הגלובלי בפונקציה כי יינתנו בהמשך, תצטרך להכריז על עצמך. אנחנו יכולים לומר כי מדובר במעיין שיעורים על ההתבוללות של נושא הלקח. הנה הקוד:

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

דואר ( "administrarot@example.com", "שימו לב, את התסריט נרשם ניסיון פריצה חבלה עם נתונים", $ _SERVER [ "REMOTE_ADDR"]);
הד "הייתה בטיחות שבורה או לנסות לעשות זאת הודיעה המנהל.";
יציאה;

} Else {
}
?>

עכשיו הסבר לכך. חלקית C_COOKIE מגיע אלינו ממקור אמין. כדי מרוצה לחלוטין בהתאם לתוצאות הצפויות, אנחנו בודקים הערך שלו ולהודיע למנהל במקרה של בעיות. אם זה לא בא, אז שום פעולה ולא צריכה לעשות. אתה צריך להבין כי פשוט השבתת הנחית register_globals לא עושה הקוד שלך מאובטח. לכן, כל משתנה שמקבל תסריט מהמשתמש, יש לבדוק את הערך הצפוי.

מסקנה

כאן, באופן כללי, וכל מה שאתם צריכים לדעת על משתנים גלובליים בהצלחה ובבטחה להשתמש בהם בעבודתם. כמובן, לומר כי קיימת ערבות מלאה שאף אחד לא משתמש בהם לא יכול - התוקפים משתפרים שיטותיהם הזמן ומיומנויות. לכן רצוי להגביל את השימוש המרבי של משתנים גלובליים בקוד. למרבה המזל, תכונות המבנה והעיצוב של שפת התכנות הזאת יכולה להשיג את המטרה הזאת. מזל טוב!

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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