php / אימות ומעקב אחר משתמשים עם php / אימות HTTP עם PHP

אימות HTTP עם PHP



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

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

סקריפט PHP פשוט יכול לחקות אימות HTTP בסיסי מסוג אתגר/תגובה ע"י שליחת כותרות ה HTTP- הנכונות שיציגו אוטומטית את תיבת הדו-שיח "שם משתמש וסיסמא". PHP שומרת את המידע המוכנס לתיבה בשלושה משתנים גלובאליים:
($PHP_AUTH_USER, $PHP_AUTH_PW, $PHP_AUTH_TYPE )
ע"י שימוש במשתנים האלה, תוכלו לאמת מידע מול רשימת שם משתמש/סיסמא השמורה כקובץ טקסט, מאגר, או כל רשימה אחרת המתאימה לכם.

שימו לב: המשתנים הגלובאליים
$PHP_AUTH_PW, $PHP_AUTH_TYPE ו - $PHP_AUTH_USER
-מוצעים רק כאשר PHP מותקנת כמודול. אם אתם משתמשים בגרסת ה CGI- של ,PHP אתם מוגבלים לשימוש באימות מבוסס .htaccess או באימות מונע מידע העושה שימוש בתבניות HTML כדי להכניס את שם המשתמש והסיסמא וב PHP-כדי לוודא את תקיפותם.

בואו נתחיל לאט, בכתיבת סקריפט PHP שפשוט מאוד מחפש ערך (כל ערך) ל $PHP_AUTH_USER - אם לא קיים שום ערך כזה, הסקריפט ישלח הודעת "אי-אישור" 401 בכותרת העליונה. הכותרת הזאת תגרום להופעת תיבת הדו-שיח "שם משתמש/סיסמא", והרצת הסקריפט תעצר . אחרי שהמשתמש יכניס ערכים לתיבה וילחץ על כפתור ה"אישור", המידע ישלח והעמוד יתרענן. כאשר מוכנס ערך מסוג $PHP_AUTH_USER, נדלג על החלק הראשון של הסקריפט והכותרת העליונה לא תשלח. רק כדי להוכיח שאני לא משקר לכם, שארית הסקריפט מדפיסה את הערכים שהוכנסו עבור $PHP_AUTH_TYPE ו-$PHP_AUTH_PW - נסו ותראו איך זה עובד.


<?php

// File Name: auth01.php
// Check to see if $PHP_AUTH_USER already contains info

if (!isset($PHP_AUTH_USER)) {

// If empty, send header causing dialog box to appear

header('WWW-Authenticate: Basic realm="My Private Stuff"');

header('HTTP/1.0 401 Unauthorized');
echo 'Authorization Required.';
exit;
}

// If not empty, display values for variables

else {

echo "
<P>You have entered this username: $PHP_AUTH_USER<br>
You have entered this password: $PHP_AUTH_PW<br>
The authorization type is: $PHP_AUTH_TYPE</p>
";

}

?>


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

עכשיו, נאמת את הצמד שם משתמש וסיסמא מול ערכים קבועים מראש בתוך הסקריפט. השיטה הזו יעילה רק במקרה בו כל המשתמשים נכנסים על אותו שם ועל אותה סיסמא . (סיסמאות "administrator" לדוגמא) .הסקריפט הזה די דומה לדוגמא הראשונה.
דבר ראשון נבדוק את, $PHP_AUTH_USER כדי לראות אם מוגדר לו ערך.
במקרה שלא, נשלחת כותרת 401 המקפיצה את תיבת הדו-שיח. אם המשתנה $PHP_AUTH_USER כן מכיל ערך הוא בודק שערכי השם והסיסמא תואמים את הערכים המבוקשים. אם $PHP_AUTH_USER מכיל ערך(כל ערך),לכו לביטוי If/else (אם /אחרת :אם ) הוכנסו פרטים לא נכונים, הצג את תיבת הדו-שיח שוב. אבל אם שם המשתמש תקף, שלח הודעה שמודיעה כך.

<?php

// File Name: auth02.php

// Check to see if $PHP_AUTH_USER already contains info

if (!isset($PHP_AUTH_USER)) {

// If empty, send header causing dialog box to appear

header('WWW-Authenticate: Basic realm="My Private Stuff"');
header('HTTP/1.0 401 Unauthorized');
echo 'Authorization Required.';
exit;

} else if (isset($PHP_AUTH_USER)) {

if (($PHP_AUTH_USER != "admin") || ($PHP_AUTH_PW != "abc123")) {

header('WWW-Authenticate: Basic realm="My Private Stuff"');

header('HTTP/1.0 401 Unauthorized');
echo 'Authorization Required.';
exit;

} else {
echo "
<P>You're authorized!</p>
";
}
}

?>


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

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



עמוד הבא: אימות מול קובץ שטוח >>




הקדמה
אימות HTTP עם
PHP >
אימות מול קובץ
שטוח
אימות מול מאגר
מידע
שימוש ב'קוקיס'
סשנים הם
התשובה
סשנים והעדפות
משתמש
סיכום