Hallo,
Ik heb een inlog script gemaakt:
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):
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)
.
Ik heb een inlog script gemaakt:
PHP:
<!-- 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):
PHP:
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)
.
Laatst bewerkt: