Bonjour,

Je me permets de poser ici ma question. Je suis en train de développer un site et j'en suis pour l'instant au formulaire d'inscription. Je me suis documenté sur l'aspect sécurité et j'ai un problème...
Ma logique est la suivante:
- Si javascript est activé, le salt est crée et le mot de passe est hashé (cryptoJS), tout ça côté client. Puis l'envoi vers la base se fait en POST pour l'insertion.
- Si javascript est désactivé, le mot de passe est transmis en clair au serveur qui crée le salt et hash le tout.

Lors de mes tests (en activant et désactivant javascript), le mot de passe hashé est différent selon que javascript soit activé ou pas (je mets un salt fixe pour les tests...).
Je dois avoir un soucis quelque part mais là je tourne en rond...

voici mon code:
partie html:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<script src="Resources/lib/crypto/sha512.js"></script>
			<script src="Resources/scripts/crypto/checkAndSecurePassword.js"></script>
			
			<!-- Content -->
			<form action="index.php?controleur=Reception&action=NewUser" onsubmit="securePassword()" method ="post">
				<p>Pseudo : <input type="text" name="pseudo"/></p>
				<p>Mot de passe : <input type="password" id="password" oninput="checkPassword()"/></p>
				<p>Confirmez le mot de passe : <input type="password" id="password_confirm" oninput="checkPassword()"/></p>
				<p>Adresse mail : <input type="email" name="email"/></p>
				<input type="hidden" name="hashpassword" id="hashpassword" value="">
				<input type="hidden" name="salt" id="salt" value="">
				<p><input type="submit" value="Inscription" /><p>
			</form>
la partie javascript
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function securePassword() {

	// var salt = CryptoJS.lib.WordArray.random(128);
	var salt ='bf820f2ad9d78e10785f9937ee42c27de10e414ee7569c401f3bb8f526e425f5fae6ebb683301ef7213bd8ebbf12a6d3d7aa0dac2c79f1b68815a4a0bc0c8d2f';
	document.getElementById('salt').value = salt;
	
	var password = document.getElementById('password').value;

	var insert = password + salt;
		
	var hashPassword = CryptoJS.SHA512(CryptoJS.SHA512(CryptoJS.SHA512(insert)));
	document.getElementById('hashpassword').value = hashPassword;
	
}
la partie php (si javascript est désactivé):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
public function createUser(){
	
		$pseudo = $_POST['pseudo'];
		$email = $_POST['email'];
		
		$passwd_JS = $_POST['hashpassword'];
		$salt_JS = $_POST['salt'];
	
		if (strlen($_POST['hashpassword']) == 128) {
		
			$salt = $salt_JS;
			$pass_hash = $passwd_JS;
		
		} else {
		
			// Crée un salt au hasard
			// $random_salt = hash('sha512', uniqid(mcrypt_create_iv(16), TRUE));
			$random_salt = "bf820f2ad9d78e10785f9937ee42c27de10e414ee7569c401f3bb8f526e425f5fae6ebb683301ef7213bd8ebbf12a6d3d7aa0dac2c79f1b68815a4a0bc0c8d2f";
			$salt = $random_salt;
			$insert = $_POST['password'] . $salt;

			// Crée le mot de passe en se servant du salt généré ci-dessus 
			$pass_hash = hash('sha512',hash('sha512',hash('sha512', $insert)));
		
		}
		
		Pattern::getBdd();
		
		$req = 'INSERT INTO members(username, email, password, salt) VALUES(:username, :email, :password, :salt)';

		$new_user = $this -> executeQuery($req, array (
			':username' => $pseudo,
			':email' => $email,
			':password' => $pass_hash,
			':salt' => $salt));


	}
J'ai surement un problème en javascript car si je fais des alert ça ne fonctionne pas...
Merci de votre aide.


edit:
j'ai vérifié les 2 fonctions de hash avec une chaîne fixe et elles retournent le même résultat... Le soucis vient du sript php. Si je mets un mot de passe simple (ex: 'a') et que je teste les 2 entrées en base avec des tables de reverse hash, seul le hash provenant de javascript est "dé-hashé"... celui provenant du php ne l'est pas...
Je pense à la transmission des variables en POST mais je ne vois vraiment pas où est le problème...