Php 客户端哈希登录系统
我正在尝试创建一个简单的登录系统,允许用户注册/登录,但希望在将密码发送到服务器之前在客户端对其进行散列。我知道这不是标准做法,但我正在努力让它发挥作用。我希望我能对我的错误有所了解 以下是我目前的代码:Php 客户端哈希登录系统,php,html,css,Php,Html,Css,我正在尝试创建一个简单的登录系统,允许用户注册/登录,但希望在将密码发送到服务器之前在客户端对其进行散列。我知道这不是标准做法,但我正在努力让它发挥作用。我希望我能对我的错误有所了解 以下是我目前的代码: <?php include_once('connect.php'); $username = $_POST['username']; $sql = "SELECT salt FROM users WHERE username = '$username';"; $result = $c
<?php
include_once('connect.php');
$username = $_POST['username'];
$sql = "SELECT salt FROM users WHERE username = '$username';";
$result = $conn->query($sql);
$row = mysqli_fetch_assoc($result);
echo $row['salt'];
$variable = $_GET['tmp'];
$getPass = "SELECT passwordhash FROM users WHERE username = '$username' AND passwordhash = '$variable ';";
//Run the sql and either set tmp variable of isValid to 1 or 0 and then echo it below or see how many rows are returned?
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="style.css">
<script src="sha256.js"> </script>
<script>
function changeFormLogin() {
var pass = document.getElementById('getPass').value;
var username = document.getElementById('username').value;
var getSalt = <?php echo $row['salt']; ?>
var hashpass = SHA256(pass+pass);
var tmp = validateLogin(hashpass);
if(tmp ==1){
//Welcome the user back, and load new form
}
else{
//Tell them to try again, notify them.
}
document.getElementById("demo").innerHTML = getSalt; //Used for testing
return true;
}
function validateLogin(hashPass){
}
</script>
</head>
<body>
<div class="loginBox">
<img src="user.png" class="user">
<h2>Log In Here</h2>
<form action="#" onsubmit ="return changeFormLogin()">
<p>Email</p>
<input id="username" type="email" name="username" placeholder="Enter Email" required>
<p>Password</p>
<input id="getPass" type="password" name="password" placeholder="••••••" required>
<input type="submit" name="login" value="Sign In">
<p id="demo"></p>
</form>
<a href="index.php"><input type="submit" name="login" value="Return home"></a>
</div>
您允许表单提交到服务器,它会阻止javascript执行
我不确定您是否正在使用库或类似的库,但它需要sha256的小写字母,而不是您键入的大写字母
这是工作代码
函数changeFormLogin(){
var pass=document.getElementById('getPass').value;
var username=document.getElementById('username')。值;
var getSalt=123566//您的盐
var hashpass=sha256(pass+pass);
log(hashpass);
var tmp=validateLogin(hashpass);
如果(tmp==1){
//欢迎用户返回,并加载新表单
}
否则{
//告诉他们再试一次,通知他们。
}
document.getElementById(“demo”).innerHTML=getSalt;//用于测试
返回true;
}
函数validateLogin(hashPass){
}
在这里登录
电子邮件
密码
在这里查看答案:你的思路是正确的(如果你真的、真的、真的想在客户端进行哈希运算),但是如果你会遇到一些问题(如果你是按用户排序[而且你应该这样做],那么你如何将用户名从客户端发送到服务器以查找他们的salt?)要实现这样的来回通信,最终需要使用AJAX。另外,如果您不熟悉“SQL注入攻击”,请,请,请去查阅。是的,我们的老师希望我们在客户端进行哈希运算,不知道为什么。。猜猜从2012年学到了什么,我们不会再使用了?IDK从它那里学到一些安静。你的代码对于SQL注入攻击是开放的——使用参数化的语句,或者考虑所有的数据泄露。