אתה נמצא כאן מדריכים  >>  הגנת מידע  >>  טיפול בססמא

טיפול בססמא

הצפנת הססמא

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

file name: protect.php (functions section)
<?
  /* Returns the encrypted password of the given string. */
  function CalculatePassword($pass)
  {
     $pass=$pass[0].$pass.$pass[0];
/*שינוי קל לססמא:
מוסיפים את האות הראשונה של הססמא
לתחילתו ולסופו של מחרוזת הססמא.
למשל: "1234" => "112341".
*/

     $pass=md5($pass);
/*מצפין את הססמא באמצעות
אלגוריתם ההצפנה md5.
*/

     return $pass;
/*מחזיר את הססמא המוצפנת.
(מספר הקסאדצימלי בן 32 ספרות).
*/

  }
?>

אימות הססמא

כדי לאמת את הססמא, בניתי את הפונקציה CheckUserPassword(), שמחזירה את הססמא המוצפנת אם שם המשתמש והססמא נכונים, אחרת מחזירה שקר.

file name: protect.php (functions section)
<?
  /* Checks the user and password for match. Returns a STRING of the password if authorized, FALSE if not allowed. */
  function CheckUserPassword($user,$pass,$with_calc=true
/*קובע האם יש צורך להצפין את
הססמא, או שמא הססמא כבר מוצפנת.
אם אמת, אז צריך להצפין את הססמא.
*/
)
  {
     global $protect_user_group;
/*מספר הזיהוי של קבוצת המשתמשים.
(נלקח מהמשתנים הגלובלים).
*/

  
     if ($user=="" || $pass=="")
        return false;
  
     /*** CHANGE: host, user, password and db ***/
/*ב-2 השורות הבאות עליכם לשנות את
השרת, שם המשתמש, הססמא ובסיס הנתונים.
*/

     $sql=@mysql_connect("localhost","","") or die("<BR>ERROR: cannot connect to MySQL server!"); //connect to MySQL server
  
   @mysql_select_db("phpsite",$sql) or die("<BR>ERROR: cannot use the DB!"); //selects the DB
  

     $c_pass=($with_calc==true)?CalculatePassword($pass):$pass;
/*מצפין את הססמא במקרה הצורך, כך שבסוף
$c_pass מכיל את הססמא המוצפנת.
*/

     $res=@mysql_query("SELECT user FROM user_pass WHERE (protect_user_group='".$protect_user_group."' AND user='".$user."' AND pass='".$c_pass."')"
/*שאילתא לבחירת שם המשתמש בו שם המשתמש
והססמא זהים לשם המשתמש והססמא שקיבלנו.
*/
,$sql) or die("<BR>ERROR: incorrect query!");
  
     if (mysql_num_rows($res)==1)
/*אם קיבלנו שורה אחת בתוצאה,
אז יש לנו התאמה.
*/

        return $c_pass;
/*מחזיר את הססמא המוצפנת.*/

     return false;
/*אחרת, אם אין התאמה,
מחזירים ערך שקר.
*/

  
     @mysql_close($sql); //close the MySQL server
  
}
?>

שים לב: הפונקציה CheckUserPassword() יכולה להחזיר 2 סוגים שונים של משתנים. במקרה ויש אימות ססמא אז הפונקציה מחזירה מחרוזת (הססמא המוצפנת), ובמקרה שאין אימות ססמא אז הפונקציה מחזירה בוליאן (ערך FALSE).


תגובות בנושא

שאלה.. 10-12-03 00:01
 Rony
#1155

ואיך מחזירים ממוצפן לרגיל?

החזרה ממוצפן לרגיל? 31-10-03 17:01
 אלי חן (מנהל)
#1200

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

כדאי לציין 01-12-04 23:02
 Omer
#1412

לשאלתך, רוני, מוטב לציין כי אם אתה רוצה לבדוק אם הסיסמא שהוזנה בשדה נכונה, אתה יכול לעשות זאת כך:
---------
$field1=md5($field1);
if ($field1==$password)
{
actions
}
---------
field1=שדה טקסט
$password=סיסמא (רצוי, כמובן, מבסיס נתונים)

שאלות? תגובות?

מה הסיסמא להתחברות? 06-12-07 03:01
 עידן חכים
#2767

אז ככה.

התקנתי את המערכת הזאתי ואני מנסה להתחבר
והוא לא נותן לי,
מה השם משתמש ומה הסיסמא?והאם אפשר לשנות סיסמא?

המשך לתגובה הקודמת 06-12-07 03:01
 עידן חכים
#2768

ואיך עושים לזה הרשמה?

כי אני רוצה שמישרוצה להיכנס אליי לאתר הוא צריך להירשם לזה או להתחבר!אני צריך הרשמה תואמת לזה שכולם יוכלו להירשם ולגלוש באתר

איפה ההגנה? 08-12-10 01:00
 אולג קגן
#2887

יש-כאן sql injection


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