אתה נמצא כאן מדריכים  >>  הגנת מידע  >>  ניהול הגנת הדף

ניהול הגנת הדף

כאן אנו מגיעים ללבה של התוכנית. תפקידו של הסקריפט בקובץ protect.php, הוא למנוע את תכולת הדף מלהגיע למשתמשים שלא אמורים לראות את תוכן הדף. בסקריפט זה אנו נשתמש בפונקציה CheckUserPassword() כדי לאמת שמות משתמשים וססמאות, ונשתמש ב-sessions כדי לשמור נתונים לגבי שמות משתמשים וססמאות שאומתו.

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

file name: protect.php (main program section)
<?
  session_cache_limiter("nocache");
/*קובע את ה-cache עבור ה-session הנוכחי
ועבור הרצת הסקריפט הנוכחית ל-no_cache,
שמונע את שמירת הדף ב-cache של הדפדפן.
זאת אומרת שהדף נטען מחדש בכל כניסה אליו.
*/

  session_start();
/*מתחיל את ה-session.*/

  
  if (!isset($protect_user_group))
/*אם מספר הזיהוי של קבוצת המשתמשים לא מוגדר,
אנו מאתחלים אותו עם ברירת המחדל 0.
*/

     $protect_user_group=0;
  
  if (!isset($_SESSION["auth_user_id".$protect_user_group]) && !isset($_SESSION["auth_password_id".$protect_user_group]))
/*אם המשתנים auth_user_idXX ו-auth_password_idXX
לא שמורים ב-session, אז סימן שהמשתמש
אינו מורשה עדיין לצפות בדף.
(XX מסמן את מספר הזיהוי של קבוצת המשתמשים).
*/

  {
     $us=$_POST["auth_user_"];
/*המשתנה $us מכיל את שם המשתמש
שנשלח מטופס הכניסה.
אם הטופס לא נשלח, אז ערכו הוא null.
*/

     $ps=CheckUserPassword($_POST["auth_user_"],$_POST["auth_password_"]);
/*המשתנה $ps מכיל את הססמא המוצפנת
במקרה של אימות ססמא נכונה, או
FALSE במקרה של ססמא שגויה.
אם הטופס לא נשלח, אז ערכו יהיה null.
*/

     if ($ps===false)
/*אם שם המשתמש והססמא לא נכונים...*/
  //if user-password is not send or incorrect
  
   {
        echo "<DIV align=\"center\" dir=\"rtl\">\n\n";
        echo "<H2><FONT color=\"#CC0000\">דף מוגן !!!</FONT></H2><B>אינך מורשה לצפות בדף זה ללא היתר.</B><BR><BR>\n\n";
  
        /* Displaying the User-Password Form: */
        ?>
      <FORM action="
<?= $_SERVER["PHP_SELF"]; ?>" method="POST">
         <TABLE width=200 cellpadding=5 cellspacing=0 border=0 bgcolor="#BBBBBB">
            <TR>
               <TD width=100>משתמש:</TD>
               <TD width=100><INPUT type="TEXT" name="auth_user_" value="
<?= $us; ?>" style="width:95px;"></TD>
            </TR>
            <TR>
               <TD width=100>ססמא:</TD>
               <TD width=100><INPUT type="PASSWORD" name="auth_password_" style="width:95px;"></TD>
            </TR>
            <TR>
               <TD colspan=2 align="center"><INPUT type="SUBMIT" name="auth_button_enter" value=" הכנס "></TD>
            </TR>
         </TABLE>
      </FORM>
      
<?
  
        if (isset($_POST["auth_button_enter"]))
/*אם טופס הכניסה נשלח, ולא היה אימות ססמא,
אז מדפיסים הודעה בדבר ססמא שגויה.
*/

           echo "<B><FONT color=\"#FF0000\">שם המשתמש והססמא שגויים!</FONT></B><BR><BR>\n";
  
        echo "</DIV>\n\n";
        exit();
/*חשוב מאוד:
עוצר את הסקריפט, ובכך מונע
את שליחת תוכן הדף למשתמש.
*/

     }
     else
/*אם שם המשתמשם והססמא שנשלחו הם נכונים...*/
  //if the user-password that was entered is correct
  
   {
        $_SESSION["auth_user_id".$protect_user_group]=$us;
/*שומר את שם המשתמש ב-session,
במשתנה auth_user_idXX.
(XX מסמן את מספר הזיהוי של קבוצת המשתמשים).
*/

        $_SESSION["auth_password_id".$protect_user_group]=$ps;
/*שומר את הססמא המוצפנת ב-session,
במשתנה auth_password_idXX.
(XX מסמן את מספר הזיהוי של קבוצת המשתמשים).
*/

        header("Location: ".$_SERVER["PHP_SELF"]);
/*מעלים שוב את אותו הדף, כדי למנוע
מהמידע שנשלח מהטופס להישלח
שוב כאשר מרעננים את הדף.
*/

     }
  }
  elseif (CheckUserPassword($_SESSION["auth_user_id".$protect_user_group],$_SESSION["auth_password_id".$protect_user_group],false)===false)
/*אם המשתנים הנכונים שמורים ב-session,
אז בודקים את שם המשתמש והססמא מתוך
ה-session, ובמקרה של ססמא שגויה,
מדפיסים הודעה בדבר דף מוגן.
*/

  {
     /* If we got to here, then there are user and password saved in the session, but they do not match. */
/*אם הגענו לכאן, אז יש שם משתמש
וססמא ששמורים ב-session, אך
אין להם אימות בבסיס הנתונים.
(בדר"כ לא תוכל להגיע לחלק זה).
*/

     echo "<DIV align=\"center\" dir=\"rtl\"><H2><FONT color=\"#CC0000\">אינך מורשה להכנס לדף זה !!!</FONT></H2></DIV>\n";
     exit();
/*חשוב מאוד:
עוצר את הסקריפט, ובכך מונע
את שליחת תוכן הדף למשתמש.
*/

  }
  elseif ($_GET["logout"]=="true")
/*אם אנו רוצים לצאת מן הדף המוגן...*/

  {
     session_unregister("auth_user_id".$protect_user_group);
/*מוחק את המשתנה auth_user_idXX
מה-session.
*/

     session_unregister("auth_password_id".$protect_user_group);
/*מוחק את המשתנה auth_password_idXX
מה-session.
*/

     header("Location: ".$_SERVER["PHP_SELF"]);
/*מעלים את אותו הדף שוב,
כדי להציג את טופס הכניסה.
*/

  }
  
  /* If you got to here, then you are authorized! */
/*אם הגעת עד לכאן, אז סימן
שאתה מורשה לצפות בדף המוגן...
*/

?>


תגובות בנושא

איזה משתמשים אלו? 09-12-03 21:02
 חי
#1141

אילו משתמשים אלו? אם אין לי מערכת משתמשים באתר איך אני משתמש בדבר הזה? ואיך אני עושה יוזרים לאתר שלי?

משתמשים 31-10-03 17:00
 אלי חן (מנהל)
#1198

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

שלום 08-12-06 22:01
 אלון המלך
#2711

איך אני מגדיר את השם משתמש והסיסמה שיכנסו??
אשמח אם תענו לי על זה בהקדם כי זה חשוב

אז היא מתאמת לכל... 06-12-07 04:01
 עידן חכים
#2770

אז היא מותאמת למערכת הרשמה אחרת?

או שאני צריך לבנות דומה לזאת?

ניקוי sessions 08-12-10 01:00
 אולג קגן
#2888

דעה שלי אישית עדיף לשתמש ב ()session_unset
ל ניקוי כל sessions


לדף הקודםטיפול בססמא -הקודם
לתחילת הדףלתחילת הדף
הבא- דוגמא להגנה על דףלדף הבא