无法阻止密码在登录单击后自动在密码字段中伸展
Unable to prevent password from automatically stretching out in password field after login click
>我有一个表单,其中密码在客户端被加密,并在单击登录后作为"post"发送。但是,我无法阻止密码输入在单击登录时拉伸为随机字符串。我希望加密在幕后进行。基本上,我的意思是,当我输入密码并单击 登录 ,密码大小会增加,因为它现在描绘了加密的密码并且表单提交。
这是我的表格部分:-
<form action="/scripts/loginsql.php" method="post" id="user_login" onsubmit="submitLogin()" >
<label for="textfield"></label>
<input name="username" type="text" class="textfieldstyle" id="username" placeholder="Username" >
<br>
<br>
<br>
<input name="password" type="password" class="textfieldstyle" id="password" placeholder="Password" >
<input name="Sign In" type="image" src="/images/signin.png" class="textfieldstyle" id="submit" />
<?php
$ipADDR = $_SERVER['REMOTE_ADDR'];
$salt = exec("/opt/bin/createLoginSalt " . $ipADDR);
echo '<input id="salt" value="' . $salt . '" readonly="readonly" type="hidden">';
?>
</form>
这是js部分:-
function submitLogin(){
var sltElement = document.getElementById("user_login").elements.namedItem("salt");
var userElement = document.getElementById("user_login").elements.namedItem("username");
var passwdElement = document.getElementById("user_login").elements.namedItem("password");
var passHash = Aes.Ctr.encrypt(passwdElement.value, sltElement.value, 256);
passwdElement.value = passHash;
sltElement.value = " ";
passwdElement.form.submit();
}
这是php部分:-
$error='';
if(!isset($_POST['username']) || !isset($_POST['password'])){
$error = "Username or Password is invalid";
}
else
{
$username=$_POST['username'];
$stringEncrypted=$_POST['password'];
$ipADDR = $_SERVER['REMOTE_ADDR'];
$username = stripslashes($username);
$stringEncrypted = stripslashes($stringEncrypted);
$encryptionKey = exec("/opt/bin/getLoginSaltForSession " . $ipADDR);
$password = AesCtr::decrypt($stringEncrypted, $encryptionKey, 256);
$result = exec("/opt/bin/chkLignCrdntls " . $username . " " . $password . " " . $ipADDR);
if ($result == 'false') {
header("location: /scripts/login.php"); // Redirecting To Other Page
exit();
} else {
header("location: /protected/main.html?tokn=" . $result); // Redirecting To Other Page
$result = exec("/opt/bin/deleteLoginSalt " . $encryptionKey . " " . $ipADDR);
exit();
}
将发送到服务器的密码字段设置为表单中的隐藏字段。
<form action="/scripts/loginsql.php" method="post" id="user_login" onsubmit="submitLogin()" >
<label for="textfield"></label>
<input name="username" type="text" class="textfieldstyle" id="username" placeholder="Username" >
<br>
<br>
<br>
<input type="password" class="textfieldstyle" id="password" placeholder="Password" >
<input name="password" type="hidden" id="hiddenpassword">
<input name="Sign In" type="image" src="/images/signin.png" class="textfieldstyle" id="submit" />
<?php
$ipADDR = $_SERVER['REMOTE_ADDR'];
$salt = exec("/opt/bin/createLoginSalt " . $ipADDR);
echo '<input id="salt" value="' . $salt . '" readonly="readonly" type="hidden">';
?>
</form>
然后,JS将从可见字段中获取密码并将其加密到隐藏字段中。
function submitLogin(){
var sltElement = document.getElementById("user_login").elements.namedItem("salt");
var userElement = document.getElementById("user_login").elements.namedItem("username");
var passwdElement = document.getElementById("password");
var hiddenPasswdElement = document.getElementById("hiddenpassword");
var passHash = Aes.Ctr.encrypt(passwdElement.value, sltElement.value, 256);
hiddenPasswdElement.value = passHash;
sltElement.value = " ";
passwdElement.form.submit();
}
可见密码元素没有 name
属性,因此不会随表单一起提交。
更好的做法是在服务器端进行哈希处理。如果你试图防止客户端和服务器之间的中间人攻击,你应该实现HTTPS。
也就是说,如果你真的想走这条路,请使用 AJAX。
使用 jQuery
function submitLogin() {
var sltElement = document.getElementById("user_login").elements.namedItem("salt");
var userElement = document.getElementById("user_login").elements.namedItem("username");
var passwdElement = document.getElementById("user_login").elements.namedItem("password");
var passHash = Aes.Ctr.encrypt(passwdElement.value, sltElement.value, 256);
sltElement.value = " ";
var formData = {
"username": userElement.value,
"password":passHash
}
$.ajax({
type: 'POST',
url: '/scripts/loginsql.php',
data: formData,
dataType: 'json',
encode: true
})
}
您可以简单地从隐藏输入发送密码。你的代码是这样的
<form action="/scripts/loginsql.php" method="post" id="user_login" onsubmit="submitLogin()" >
<label for="textfield"></label>
<input name="username" type="text" class="textfieldstyle" id="username" placeholder="Username" >
<br>
<br>
<br>
<input type="password" class="textfieldstyle" placeholder="Password" id="password">
<input type="hidden" name="password" class="textfieldstyle" placeholder="Password" id="hiddenPassword">
<input name="Sign In" type="image" src="/images/signin.png" class="textfieldstyle" id="submit" />
<?php
$ipADDR = $_SERVER['REMOTE_ADDR'];
$salt = exec("/opt/bin/createLoginSalt " . $ipADDR);
echo '<input id="salt" value="' . $salt . '" readonly="readonly" type="hidden">';
?>
</form>
和 JS
function submitLogin(){
var sltElement = document.getElementById("user_login").elements.namedItem("salt");
var userElement = document.getElementById("user_login").elements.namedItem("username");
var passwd = document.getElementById("password").value;
var hiddenPasswdElement = document.getElementById("user_login").elements.namedItem("hiddenPassword");
var passHash = Aes.Ctr.encrypt(passwd, sltElement.value, 256);
hiddenPasswdElement.value = passHash;
sltElement.value = " ";
passwdElement.form.submit();
}
相关文章:
- Internet Explorer缺少占位符支持,特别是密码字段
- 密码字段的问题
- 如何在html中将密码字段显示为秒后的星号
- 如何在ie7或更高版本中设置密码字段的占位符
- 没有文本安全性的密码字段
- HTML:密码字段中的HTML5占位符属性问题 - 显示正常文本
- 我该如何实现CSS/HTML中使用密码字段的非常简单的文本框提示
- 将加密的剃须刀密码字段发送到 mvc4 控制器
- 验证密码字段是否为空
- Javascript 密码字段比较
- 当我尝试计算密码字段时,下面的代码有什么问题
- 两个密码字段的 JQuery 验证
- 检查输入类型并在单击保存时跳过输入“密码”字段
- 无法阻止密码在登录单击后自动在密码字段中伸展
- Spring Security Core和用于确认密码字段的自定义验证器是可能的
- 如何复制JavaScript's的提示函数在一个带有密码字段的新模式中
- 对用户隐藏密码字段内容
- 通过jQuery确认2个密码字段
- jqgrid密码字段不仅在编辑模式下
- 用于验证密码字段的正则表达式