secret salt in sha1 wachtwoorden in database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bo Bo

Bo Bo

21/10/2008 17:33:00
Quote Anchor link
Hallo,

Ik heb een inlog script gemaakt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<!-- mijn sha1hash functiee hierin: -->
<script type="text/javascript" src="/js/functions.js"></script>


<?php

if(!empty($_POST) && isset($_POST['action']) && $_POST['action'] == 'login'){  

    $qry = mysql_query("SELECT usr_id FROM tbl_users WHERE sha1(concat('".$_SESSION['salt_logon_username'].":' , sha1(usr_username)))='".addslashes($_POST['post_username'])."' AND sha1(concat('".$_SESSION['salt_logon_password'].":' , usr_password))='".addslashes($_POST['post_password'])."'");
    $accepted = mysql_numrows($qry);

        if ($accepted == 1){
            echo "login succeed:)";}
        else {
            echo "Sorry, your login was incorrect";
        }
}

        
$_SESSION['salt_logon_username'] = str_shuffle(base64_encode((string)rand(0,9000000)));
$_SESSION['salt_logon_password'] = str_shuffle(base64_encode((string)rand(0,9000000)));

?>


<script type="text/javascript">

function do_logon()
{
    var salt_username = '<?= $_SESSION['salt_logon_username'] ?>';
    var salt_password = '<?= $_SESSION['salt_logon_password'] ?>';    

    document.getElementById('post_username').value = sha1hash(salt_username + ':' + sha1hash(document.getElementById('username').value.toLowerCase()));    
    document.getElementById('post_password').value = sha1hash(salt_password + ':' + sha1hash(document.getElementById('username').value.toLowerCase() + ':' + document.getElementById('password').value));

    document.getElementById('username').value = '';
    document.getElementById('password').value = '';
    return true;
}


</script>

<BR><BR>

<form id="login" method="post" action="" onsubmit="return do_logon();">
    <input type="hidden" name="action" id="action" value="login">
    <input type="hidden" name="post_username" id="post_username" value="">
    <input type="hidden" name="post_password" id="post_password" value="">

    Username <input type="text" name="username" id="username" value=""><BR>
    Password <input type="password" name="password" id="password" value=""><BR>    
    <input type="submit" value="login" >
</form>


die de username en password van een gebruiker versleuteld over het nerwerk heen stuurt, zodat iemand met een sniffer geen kans maakt. Ik heb er ook een salt aan gekoppeld die maar 1 keer geldig is, dus een cracker de gesniffte gegevens niet nog een keer kan gebruiken.

Ik heb wachtwoorden in mijn database als volgt opgeslagen:
$password = sha1('username' . ':' . 'password');

als je nu naar dit stuk van het script hierboven kijkt (waar het script checked of het password overeen komt met de user):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
AND sha1(concat('".$_SESSION['salt_logon_password'].":' , usr_password))='".addslashes($_POST['post_password'])."'");


dan kun je daaruit opmaken dat ik een probleem krijg als ik een geheime salt wil toevoegen aan mijn wachtwoorden in de database:

$secret_salt = "#24-Fks^-=>";
$password = sha1($secret_salt . ':' . 'username' . ':' . 'password');

(omdat ik het wachtwoord al met een andere salt post..)

Dit wil ik graag, omdat een hacker die de wachtwoorden uit mijn db zou kunnen lezen er dan nooit achter kan komen wat nou eigenlijk het wachtwoord is en deze gebruiken om in te loggen.

vraag:
Weet iemand hoe ik het toch een geheime salt kan gebruiken voor de wachtwoorden in mijn database zonder mijn geheime salt in javascript te zetten of uberhaupt ergens prijs te geven?



(session hijacking is hiernaast nog mogelijk, maar hier heb ik een andere beveiliging voor)

.
Gewijzigd op 01/01/1970 01:00:00 door Bo Bo
 
PHP hulp

PHP hulp

24/05/2024 06:55:44
 
- -

- -

21/10/2008 18:11:00
Quote Anchor link
Waarom zou je in hemelsnaam in javascript je wachtwoord/gebruikersnaam willen zetten?
 
Bo Bo

Bo Bo

21/10/2008 18:27:00
Quote Anchor link
hoezo wachtwoord/gebruikersnaam in javascript zetten?

ik gebruik javascript alleen om het te encrypten om het naar de server te posten zodat een 'man-in-the-middle' met een sniffer er nooit achter kan komen met welke gebruikersnaam en wachtwoord er word ingelogged.
 

03/04/2011 22:35:21
Quote Anchor link
Bo Bo op 21/10/2008 18:27:00:
hoezo wachtwoord/gebruikersnaam in javascript zetten?

ik gebruik javascript alleen om het te encrypten om het naar de server te posten zodat een 'man-in-the-middle' met een sniffer er nooit achter kan komen met welke gebruikersnaam en wachtwoord er word ingelogged.


Maar is het dan niet zo dat je alsnog kan inloggen via een XSS injectie met de hash die Javascript normaal aanmaakt?
 
The Force

The Force

04/04/2011 10:56:27
Quote Anchor link
Bo Bo op 21/10/2008 18:27:00:
hoezo wachtwoord/gebruikersnaam in javascript zetten?

ik gebruik javascript alleen om het te encrypten om het naar de server te posten zodat een 'man-in-the-middle' met een sniffer er nooit achter kan komen met welke gebruikersnaam en wachtwoord er word ingelogged.


Maar hij kan nog steeds inloggen. Hij hoeft het wachtwoord niet te weten, hij moet enkel dezelfde pakketjes nogmaals versturen. Eventueel met nieuwe sessie, als hij in de username en password fields dezelfde gegevens stopt als wat jouw javascript heeft gegenereerd dan is hij binnen. Of jouw javascript die hash nu maakt of hij de onderschepte pakketjes opnieuw verstuurd ziet de server niet. Het houdt wellicht een newbie tegen of de hackers die alleen 'makkelijke' doelen aanvallen, maar het blijft een soort nepveiligheid. Enige echte oplossing: HTTPS.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.