omit password hash values from HTML
authorDenis Ovsienko <infrastation@yandex.ru>
Thu, 20 Mar 2014 14:10:23 +0000 (18:10 +0400)
committerAlexey Andriyanov <alan@al-an.info>
Sun, 20 Apr 2014 09:19:19 +0000 (13:19 +0400)
The local user accounts management form used to use password hash value
to indicate that there is no change to the password. Stephan Rickauer
points that exposing the hash value isn't good with the rainbow tables
attack in mind. Use an empty string for that purpose instead.

* renderUserListEditor()
* updateUser()

wwwroot/inc/interface.php
wwwroot/inc/ophandlers.php

index 5435b3e5945a830e190afad65a4f5126c0281743..8730a1738f816c60789f4dfcb9ccf1adf6c3ea59 100644 (file)
@@ -3859,13 +3859,13 @@ function renderUserListEditor ()
        $accounts = listCells ('user');
        startPortlet ('Manage existing (' . count ($accounts) . ')');
        echo '<table cellspacing=0 cellpadding=5 align=center class=widetable>';
-       echo '<tr><th>Username</th><th>Real name</th><th>Password</th><th>&nbsp;</th></tr>';
+       echo '<tr><th>Username</th><th>Real name</th><th>New password (use old if blank)</th><th>&nbsp;</th></tr>';
        foreach ($accounts as $account)
        {
                printOpFormIntro ('updateUser', array ('user_id' => $account['user_id']));
                echo "<tr><td><input type=text name=username value='${account['user_name']}' size=16></td>";
                echo "<td><input type=text name=realname value='${account['user_realname']}' size=24></td>";
-               echo "<td><input type=password name=password value='${account['user_password_hash']}' size=40></td><td>";
+               echo "<td><input type=password name=password size=40></td><td>";
                printImageHREF ('save', 'Save changes', TRUE);
                echo '</td></form></tr>';
        }
index 08c7b601cd05923c47bbb02afd0c692dd1a040c5..23395c42768d11754fcb7c6611eb381c45a934f9 100644 (file)
@@ -940,11 +940,10 @@ function updateUser ()
        genericAssertion ('user_id', 'uint');
        $username = assertStringArg ('username');
        assertStringArg ('realname', TRUE);
-       $new_password = assertStringArg ('password');
+       $new_password = assertStringArg ('password', TRUE);
        $userinfo = spotEntity ('user', $_REQUEST['user_id']);
-       // Update user password only if provided password is not the same as current password hash.
-       if ($new_password != $userinfo['user_password_hash'])
-               $new_password = sha1 ($new_password);
+       // Set new password only if provided.
+       $new_password = mb_strlen ($new_password) ? sha1 ($new_password) : $userinfo['user_password_hash'];
        commitUpdateUserAccount ($_REQUEST['user_id'], $username, $_REQUEST['realname'], $new_password);
        // if user account renaming is being performed, change key value in UserConfig table
        if ($userinfo['user_name'] !== $username)