如何插入表$ _POST ['password'] _ hash(“astkhlo”,PASSWORD_DEFAULT)

时间:2016-09-28 05:28:32

标签: php mysql

这不起作用: -

$query= "INSERT INTO `members`(`name`,`email`,`password`)  VALUES('".mysqli_real_escape_string($link,$_POST['name'])."','".mysqli_real_escape_string($link,$_POST['email'])."','".$_POST['password']_hash("astkhlo",PASSWORD_DEFAULT)."')";

我正在使用xampp。它说

  

解析错误:语法错误,意外的'_hash'(T_STRING)

3 个答案:

答案 0 :(得分:1)

您在错误的语法下使用了password_hash()

password_hash - 创建密码哈希

password_hash()使用强大的单向散列算法创建新的密码哈希。 password_hash()与crypt()兼容。因此,crypt()创建的密码哈希可以与password_hash()一起使用。

用以下内容替换您的插入查询:

方法一:

$query= "INSERT INTO `members`(`name`,`email`,`password`)  VALUES('".mysqli_real_escape_string($link,$_POST['name'])."','".mysqli_real_escape_string($link,$_POST['email'])."','".password_hash($_POST['password'],PASSWORD_DEFAULT)."')";

方法二:

$name = mysqli_real_escape_string($link,$_POST['name']);
$email = mysqli_real_escape_string($link,$_POST['email']);
$password =   password_hash($_POST['password'],PASSWORD_DEFAULT);
$query= "INSERT INTO `members`(`name`,`email`,`password`)  VALUES('".$name."','".$email."','".$password."')";

这两种方法都会产生与预期相同的输出,但我们在方法二中将字符串转义为自身。

示例:

<?php
echo password_hash("rasmuslerdorf", PASSWORD_DEFAULT)."\n";
?>

输出:

$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a
  

注意:您的脚本在插入之前即使使用SQL Injections也容易受escape the strings攻击。尝试使用prepared statements,使其在普通查询中可以avoids the SQL Injection

答案 1 :(得分:1)

需要做类似下面的事情(一种更好的方法): -

$name = mysqli_real_escape_string($link,$_POST['name']);
$email = mysqli_real_escape_string($link,$_POST['email']);
$password = password_hash($_POST['password'],PASSWORD_DEFAULT);

$query= "INSERT INTO members(name,email,password)  VALUES('".$name."','".$email."','".$password."')";

注意: -

您的脚本仍然容易受到SQL Injection的攻击。<​​/ p>

尝试学习prepared statements以阻止SQL Injection。感谢

答案 2 :(得分:1)

始终尝试编写友好的代码阅读器,并使用password_hash()作为密码。

password_hash()使用强大的单向散列算法创建新密码哈希。 password_hash()与crypt()兼容。因此,crypt()创建的密码哈希值可以与password_hash()一起使用。

$name_value = mysqli_real_escape_string($link,$_POST['name']);
$email_value = mysqli_real_escape_string($link,$_POST['name']);
$password_value =password_hash($_POST['password'],PASSWORD_DEFAULT);

$query= "INSERT INTO members(name,email,password)  
VALUES('".$name_value."','".$email_value."','".$password_value."')";