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注入攻击是开放的——使用参数化的语句,或者考虑所有的数据泄露。