Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 加密后检查空字段_Javascript_Php_Encryption - Fatal编程技术网

Javascript 加密后检查空字段

Javascript 加密后检查空字段,javascript,php,encryption,Javascript,Php,Encryption,我有一段html代码: <form action="register.php" method="post"> Email: <input type="text" name="email" /><br /> Username: <input type="text" name="username" /><br /> Password: <input type="password" name="

我有一段html代码:

<form action="register.php" method="post">
       Email: <input type="text" name="email" /><br />
       Username: <input type="text" name="username" /><br />
       Password: <input type="password" name="p" id="password" /><br />
       <input type="button" value="Register" onclick="formhash(this.form, this.form.password);" />
</form>

电子邮件:
用户名:
密码:

按下register(注册)按钮后,将调用加密并立即加密密码。我认为这将是一种非常好的安全方法,但是我似乎无法检查名为“p”的passworld字段是否为空,因为如果用户在注册时将字段保留为空,则加密会加密空字段,因此它不再为空。我需要一种方法来检查用户是否将“p”字段留空,因为不可能生成包含0个字符的密码

我知道这个问题可以通过javascript解决,但我需要一种安全的方法来检查字段是否为空,因此我想得到一个PHP解决方案

register.php文件:

<script type="text/javascript" src="sha512.js"></script>
<script type="text/javascript" src="forms.js"></script>

<?php
include 'db_connect.php';

//Just to check that the p field is encrypted already at this point. 
echo $_POST['p'];

// The username
$username = $_POST['username'];
// The email
$email = $_POST['email'];
// The hashed password from the form
$password = $_POST['p']; 
// Create a random salt
$random_salt = hash('sha512', uniqid(mt_rand(1, mt_getrandmax()), true));
// Create salted password (Careful not to over season)
$password = hash('sha512', $password.$random_salt);

// Add your insert to database script here. 
// Make sure you use prepared statements!
if ($insert_stmt = $mysqli->prepare("INSERT INTO members (username, email, password, salt) VALUES (?, ?, ?, ?)")) {    
   $insert_stmt->bind_param('ssss', $username, $email, $password, $random_salt); 
   // Execute the prepared query.
   $insert_stmt->execute();
}
?>

有一个javascript函数,在单击“注册”按钮时验证表单:

使用此选项检查密码字段是否有任何输入:

if (document.getElementById('Password').value.length!=0) {
   //encrypt and submit form
} else {
   //return to form and display error to user
} 

请注意,始终使用SSL提交密码,强制用户在发送密码之前对密码进行散列,然后再次对其进行散列可能会过多,并且不会阻止任何人在攻击中重复使用密码或散列。

有一个javascript函数,可在单击“注册”按钮时验证表单:

使用此选项检查密码字段是否有任何输入:

if (document.getElementById('Password').value.length!=0) {
   //encrypt and submit form
} else {
   //return to form and display error to user
} 

请注意,始终使用SSL提交密码,强制用户在发送密码之前对密码进行散列,然后再次对其进行散列可能会过多,并且不会阻止任何人在攻击中重复使用密码或散列。

如果有人监视您的流量,他们仍然可以获得该密码。它只是从原始字符串更改为散列。这不是一个安全功能

如果您担心有人截取数据,请使用https

删除客户端哈希:

<form action="register.php" method="post">
       Email: <input type="text" name="email" /><br />
       Username: <input type="text" name="username" /><br />
       Password: <input type="password" name="p" id="password" /><br />
       <input type="submit" name="submit" value="Register" />
</form>

如果有人监视你的流量,他们仍然可以获得该密码。它只是从原始字符串更改为散列。这不是一个安全功能

如果您担心有人截取数据,请使用https

删除客户端哈希:

<form action="register.php" method="post">
       Email: <input type="text" name="email" /><br />
       Username: <input type="text" name="username" /><br />
       Password: <input type="password" name="p" id="password" /><br />
       <input type="submit" name="submit" value="Register" />
</form>


你的意思是:如果(0===strlen($\u POST['p']){/*密码为空*/}我可以在register.php页面中添加该行吗?$u POST['p']是否已经加密,因此不是空的?您还应该使用它来散列密码:password\u hash($password,password\u BCRYPT);它将自动添加一个salt,并且有密码验证($password,$passwordFromDb)来验证它?因为如果是这样,那么你的脚本是不安全的。当你在客户端散列密码时,散列密码和明文密码一样不安全,你仍然在以明文传输它。使用HTTPS并删除客户端骗局。你的意思是:如果(0==strlen($\u POST['p']){/*密码为空*/}我可以在register.php页面中添加该行吗?$u POST['p']是否已经加密,因此不是空的?您还应该使用它来散列密码:password\u hash($password,password\u BCRYPT);它将自动添加一个salt,并且有密码验证($password,$passwordFromDb)来验证它?因为如果是这样,那么你的脚本是不安全的。当你在客户端散列密码时,散列密码和明文密码一样不安全,你仍然在以明文传输它。使用HTTPS并放弃客户端的诡计。严格不要使用客户端的“加密”。不要多次散列密码是的,这看起来有点过分。在我的回答中添加了一条关于这一点的注释。在客户端对密码进行哈希运算只需将哈希值设置为密码即可。任何截获散列的人仍然可以在重播攻击中使用它。@Sammitch这就是为什么我说:“始终使用SSL提交密码”认真地说,不要使用客户端“加密”。不要多次散列密码是的,这看起来有点过分。在我的回答中添加了一条关于这一点的注释。在客户端对密码进行哈希运算只需将哈希值设置为密码即可。任何拦截散列的人仍然可以在重播攻击中使用它。@Sammitch这就是为什么我说:“始终使用SSL提交密码”的原因,但如果您真的担心有人拦截密码,请使用HTTPS。我将尝试实现此功能,我希望我仍然可以使用相同的登录功能。我可能需要很多时间来尝试所有这些新想法,所以我恐怕不能很快做出任何回应。谢谢:-)嗯,当我实现这个代码时,当我按下按钮时,什么都没有发生,我应该让它提交并这样做吗?还是和代码一样?因为这不起作用吗?@user2826397使用
type=“button”
不是最佳选项。解析错误:语法错误,第16行的/home/virtual/url.com/public\u html/moreurl/register.php中出现意外的T\u IF(第16行是IF“(!filter\u var($email,filter\u email)){”)行。嗯,我真的不知道问题是什么。这是,但是如果你真的担心有人截获密码,那么使用HTTPS。我将尝试实现这一点,我希望我仍然可以使用相同的登录功能。我可能需要很多时间来尝试所有这些新想法,所以我恐怕不能很快得到任何回应。谢谢:-)嗯,当我实现这段代码时,当我按下按钮时,什么也不会发生,我应该让它提交并以这种方式执行吗?还是完全按照代码的方式执行?因为这不起作用?@user2826397使用
type=“button”
不是最好的选择。解析错误:语法错误,在第16行的/home/virtual/url.com/public\u html/moreurl/register.php中出现意外的T\u IF(第16行是IF“(!filter\u var($email,filter\u email)){”)行。嗯,我真的不知道问题出在哪里。