noalyss-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Noalyss-commit] [noalyss] 01/04: Security : improve password check remo


From: Dany De Bontridder
Subject: [Noalyss-commit] [noalyss] 01/04: Security : improve password check remove user->pass which was redundant with user->password
Date: Fri, 24 Dec 2021 08:49:39 -0500 (EST)

sparkyx pushed a commit to branch devel
in repository noalyss.

commit a5ae681bc89a10cf03407d74bc4003e2060d06a7
Author: sparkyx <danydb@noalyss.eu>
AuthorDate: Wed Dec 15 19:58:35 2021 +0100

    Security : improve password check
    remove user->pass which was redundant with user->password
---
 include/ajax/ajax_preference.php      | 60 ++++++++++++++++++--------------
 include/class/user.class.php          | 65 +++++++++++++++++++----------------
 unit-test/include/class/user.Test.php | 21 ++++++++++-
 3 files changed, 91 insertions(+), 55 deletions(-)

diff --git a/include/ajax/ajax_preference.php b/include/ajax/ajax_preference.php
index d986073..551e7b0 100644
--- a/include/ajax/ajax_preference.php
+++ b/include/ajax/ajax_preference.php
@@ -138,29 +138,7 @@ if ( $action == 'display_form' )
                         
<?=$exercice->select("exercice_setting",$selected_exercice,$js)->input();?>
                     </td>
                 </tr>
-            <tr>
-                <td>
-                    <?=_("Premier jour semaine")?>
-                </td>
-                <td>
-                    <?php
-                        $aFirstDay=array(
-                            ["label"=>_("Lundi"),"value"=>1],
-                            ["label"=>_("Mardi"),"value"=>2],
-                            ["label"=>_("Mercredi"),"value"=>3],
-                            ["label"=>_("Jeudi"),"value"=>4],
-                            ["label"=>_("Vendredi"),"value"=>5],
-                            ["label"=>_("Samedi"),"value"=>6],
-                            ["label"=>_("Dimanche"),"value"=>0],
-                        );
-                        $selFirstDay=new ISelect("selFirstDay");
-                        $selFirstDay->value=$aFirstDay;
-                        $selFirstDay->selected=$g_user->get_first_week_day();
-                        echo $selFirstDay->input();
-                    ?>
-
-                </td>
-            </tr>
+          
                <tr>
                     
                     <td><?php echo _('PĂ©riode');?></td>
@@ -190,6 +168,29 @@ if ( $action == 'display_form' )
                    <?php 
                }
                ?>
+                  <tr>
+                <td>
+                    <?=_("Premier jour semaine")?>
+                </td>
+                <td>
+                    <?php
+                        $aFirstDay=array(
+                            ["label"=>_("Lundi"),"value"=>1],
+                            ["label"=>_("Mardi"),"value"=>2],
+                            ["label"=>_("Mercredi"),"value"=>3],
+                            ["label"=>_("Jeudi"),"value"=>4],
+                            ["label"=>_("Vendredi"),"value"=>5],
+                            ["label"=>_("Samedi"),"value"=>6],
+                            ["label"=>_("Dimanche"),"value"=>0],
+                        );
+                        $selFirstDay=new ISelect("selFirstDay");
+                        $selFirstDay->value=$aFirstDay;
+                        $selFirstDay->selected=$g_user->get_first_week_day();
+                        echo $selFirstDay->input();
+                    ?>
+
+                </td>
+            </tr>
            </table>
        </fieldset>
         <fieldset>
@@ -323,7 +324,16 @@ if ($action == 'save')
     
     if (strlen(trim($pass_1)) != 0 && strlen(trim($pass_2)) != 0)
     {
-       $g_user->save_password($pass_1,$pass_2);
+        if ( $g_user->save_password($_POST['pass_1'],$pass_2) ) 
+        {        $g_user->password_to_session() ;
+        
+        } else {
+           /**
+            * password not changed
+            */ 
+            
+        }
+        
         
     }
     if ( $inside_dossier)
@@ -355,4 +365,4 @@ if ($action == 'save')
     }
     json_response(["style"=>$style]);
     
-}
\ No newline at end of file
+}
diff --git a/include/class/user.class.php b/include/class/user.class.php
index 9dbf40d..838b324 100644
--- a/include/class/user.class.php
+++ b/include/class/user.class.php
@@ -75,7 +75,7 @@ class User
             if ($user_login!=""&&$user_password!="")
             {
                 $_SESSION[SESSION_KEY."g_user"]=$user_login;
-                $_SESSION[SESSION_KEY."g_pass"]=$user_password;
+                $_SESSION[SESSION_KEY."g_pass"]=md5($user_password);
             }
             else
             {
@@ -100,7 +100,7 @@ class User
             $_SESSION[SESSION_KEY.'g_user']=$this->login;
         }
         $this->login=$_SESSION[SESSION_KEY."g_user"];
-        $this->pass=$_SESSION[SESSION_KEY.'g_pass'];
+        $this->password=$_SESSION[SESSION_KEY.'g_pass'];
         $this->id=-1;
         
$this->lang=(isset($_SESSION[SESSION_KEY.'g_lang']))?$_SESSION[SESSION_KEY.'g_lang']:'fr_FR.utf8';
         $this->access_mode=$_SESSION[SESSION_KEY."access_mode"];
@@ -164,22 +164,6 @@ class User
     }
 
     /**
-     * @return default|mixed|string|string[]|null
-     */
-    public function getPass()
-    {
-        return $this->pass;
-    }
-
-    /**
-     * @param default|mixed|string|string[]|null $pass
-     */
-    public function setPass($pass): void
-    {
-        $this->pass=$pass;
-    }
-
-    /**
      * @return mixed
      */
     public function getDb()
@@ -375,7 +359,8 @@ class User
              ,use_active=$3,use_admin=$4,use_pass=$5 ,use_email = $7 where 
use_id=$6";
         $cn=new Database();
         $Res=$cn->exec_sql($Sql,
-                array($this->first_name, $this->last_name, $this->active, 
$this->admin, $this->pass, $this->id, $this->email));
+                array($this->first_name, $this->last_name, $this->active, 
$this->admin, $this->password, 
+                    $this->id, $this->email));
     }
 
     function insert()
@@ -388,7 +373,8 @@ class User
 
         $cn=new Database();
         $this->id=$cn->get_value($Sql,
-                array($this->first_name, $this->last_name, $this->login, 1, 
$this->admin, $this->pass, $this->email));
+                array($this->first_name, $this->last_name, $this->login, 1, 
$this->admin, 
+                    $this->password, $this->email));
     }
 
     /**
@@ -402,7 +388,7 @@ class User
     {
 
         $res=0;
-        $pass5=md5($this->pass);
+        $pass5=$this->password;
 
         $cn=new Database();
         $sql="select ac_users.use_login,ac_users.use_active, ac_users.use_pass,
@@ -650,7 +636,7 @@ class User
     function isAdmin()
     {
         $this->admin=0;
-        $pass5=md5($this->pass);
+        $pass5=md5($this->password);
         $sql="select count(*) from ac_users where use_login=$1
              and use_active=1 and use_admin=1 ";
 
@@ -960,7 +946,14 @@ class User
         else
         {
             $value=($p_value=="")?$default_parameter[$p_type]:$p_value;
-            $cn->exec_sql($sql, array($this->login, $p_type, $value));
+            if ( $cn->get_value("select count(*) from user_global_pref where 
user_id=$1 and parameter_type=$2",
+                array($this->login,$p_type)) == 1)
+            {
+                $cn->exec_sql("update user_global_pref set parameter_value=$1 
where user_id=$2 and parameter_type=$3",
+                        array($value,$this->login,$p_type));
+            } else {
+                $cn->exec_sql($sql, array($this->login, $p_type, $value));
+            }
         }
     }
 
@@ -1575,20 +1568,34 @@ class User
             return false;
         return true;
     }
-
+    /**
+     * @brief store the password in session
+     */
+    function password_to_session()
+    {
+          $_SESSION[SESSION_KEY.'g_pass']=$this->getPassword();
+    }
+    /**
+     * @brief Save the password of the current user 
+     * @param string $p_pass1 password (clear)
+     * @param string $p_pass2 for confirming password (clear)
+     * @return true : password successfully changed otherwise false
+     */
     function save_password($p_pass1, $p_pass2)
     {
         if ($p_pass1==$p_pass2)
         {
             $repo=new Database();
-            $l_pass=md5($_POST['pass_1']);
+            $l_pass=md5($p_pass1);
+            $this->setPassword($l_pass);
             $repo->exec_sql("update ac_users set use_pass=$1 where 
use_login=$2",
-                    array($l_pass, $_SESSION[SESSION_KEY.'g_user']));
-            $_SESSION[SESSION_KEY.'g_pass']=$_POST['pass_1'];
+                    array($l_pass, $this->login));
+            return true;
         }
         else
         {
-            alert(_("Les mots de passe ne correspondent pas. Mot de passe 
inchangé"));
+            
+            return false;
         }
     }
 
@@ -1806,4 +1813,4 @@ class User
     }
 }
 
-?>
\ No newline at end of file
+?>
diff --git a/unit-test/include/class/user.Test.php 
b/unit-test/include/class/user.Test.php
index 0e98279..d1623e3 100644
--- a/unit-test/include/class/user.Test.php
+++ b/unit-test/include/class/user.Test.php
@@ -6,7 +6,7 @@ define('USE_FIRST_NAME', 'Unit test');
 define('USE_NAME', 'UNIT');
 define('USE_LOGIN', 'unit-test');
 define('USE_ACTIVE', 1);
-define('USE_PASS', 'passord');
+define('USE_PASS', md5('password'));
 define('USE_ADMIN', 0);
 define('USE_EMAIL', 'none@dev.null.eu');
 
@@ -142,4 +142,23 @@ class UserTest extends TestCase
         $this->object->set_periode($p_id);
         $this->assertEquals($p_id,$this->object->get_periode(),"Cannot 
retrieve the right periode");
     }
+    /**
+     * @brief test the save_password function
+     */
+    public function testSave_Password() 
+    {
+        // password is in MD5 
+        $old_password=$this->object->getPassword();
+        $this->assertEquals(USE_PASS,$old_password,"Password mismatch");
+        
+        
$this->assertFalse($this->object->save_password("test1","test2"),"Passwords 
must be identical");
+        
$this->assertTrue($this->object->save_password("test2","test2"),"Identical 
passwords seen as different");
+        $this->object->load();
+        $new_password = $this->object->getPassword();
+        $this->assertTrue(($old_password != $new_password),"Password not 
changed old=$old_password new=$new_password");
+        
$this->assertTrue($new_password=='ad0234829205b9033196ba818f7a872b',"Password 
incorrect");
+        
+        
+        
+    }
 }



reply via email to

[Prev in Thread] Current Thread [Next in Thread]