2016-09-28 1 views
1

Je veux hacher mon mot de passe du côté client avant de le soumettre (j'ai mes propres raisons, je sais ce que je fais) au serveur. J'utilise jsSHA (ça marche, j'ai alerté la sortie) pour hacher le mot de passe.Ajouter un élément avant de soumettre le formulaire

Je crée un nouvel élément, attribue le mot de passe haché à sa valeur et l'ajoute au formulaire. Mais la forme ne le soumet toujours pas.

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/jsSHA/2.0.2/sha.js"></script> 
<form id = "form" name="form" method="post" action="verify.php" class="login"> 
    Username: <input type="text" name="username" style = "width: 350px"><br> 
    Password: <input type="password" name="pwd" id="pwd" style="width: 350px; margin-left: 3px;"><br> 
    Remember Me: <input type="checkbox" name="rememberme" value="1"><br> 
    <input type="submit" name="submit" value="Login!" class="loginbutton" onclick="submitForm();"> 
</form> 

JS

function submitForm(){ 
    var form = document.getElementById("form"); 
    var pwd = document.getElementById('pwd'); 
    var hash = new jsSHA("SHA-256", "TEXT", {numRounds: 1}); 
    hash.update(pwd.value); 
    var hash = hash.getHash("HEX"); 
    var password = document.createElement("password"); 
    password.name="password"; 
    password.type="hidden"; 
    password.id = "password"; 
    password.value = hash; 
    form.appendChild(password); 
    pwd.value = ""; 
    form.submit() 
} 

params envoyés:

username: user 
pwd: "" 
rememberme: "1" 
submit: "Login!" 

Comment puis-je password: *some value* à ces paramètres envoyés? Qu'est-ce que je fais mal?

+2

Si votre 'document.createElement' utilise' input' comme argument au lieu de 'password'. – CuriousMind

+0

Puis-je suggérer une solution alternative? Que diriez-vous de changer la valeur de l'entrée pwd existante juste avant de la soumettre? De cette façon, vous n'aurez pas besoin de créer un élément supplémentaire et de supprimer l'élément existant. Ceci, bien sûr, ne s'applique que tant que vous passez la page sur soumettre. Pour la vérification AJAX, vous voulez l'élément caché - mais dans ce cas, vous préférez le rechercher au lieu de le créer. –

+1

@HubertGrzeskowiak Eh bien, je le faisais de cette façon, mais ça m'a irrite parce que quand je clique sur soumettre, le mot de passe passe de ********* à ************** ******************************* avant que la page ne se recharge. – Mirakurun

Répondre

2

Vous créez un élément password au lieu d'un élément input avec type="password". Les navigateurs envoient uniquement des données à partir des éléments de formulaire qu'ils connaissent (entrée, bouton, zone de texte, etc.). En outre, vous définissez des propriétés sur l'élément, mais définir des attributs est probablement plus sûr en termes de compatibilité.

+0

Vous avez raison, merci. J'accepterai cette réponse dès que je le pourrai. – Mirakurun