从 PHP 脚本到 mySql 的哈希适用于本地主机,但不适用于 Web 服务器


hashing from php script to mySql works on localhost but not web server?

我正在尝试散列密码并将其存储在mySql数据库中。使用 localhost 存储时,这很好,现在我已经移动到服务器,哈希方法阻止了整个事情的工作。如果我删除哈希代码,它可以保存得很好,但我希望哈希密码。看起来很奇怪,因为相同的代码在本地工作正常,并且基于 Web 的代码可以很好地连接到 Sql。我已经尝试了各种不同的哈希方法,只要我尝试任何一种,我得到的都是

"2013-10-15 22:37:07.915 用户名和密码与php[20249:a0b] 来自服务器的响应 = "

而不是

"2013-10-15

22:54:53.750 用户名和密码与php[21323:a0b] 来自服务器的响应 = 连接已建立已选择数据库"

我正在运行php 5.5.3

提前非常感谢!

这是我的代码

<?php
//session_start()

$host = ""; 
$user = ""; 
$pass = ""; 
$db = "";
$r = mysql_connect($host, $user, $pass);
if (!$r) {
    echo "Could not connect to server'n";
    trigger_error(mysql_error(), E_USER_ERROR);
} else {
    echo "Connection established'n"; 
}
$r2 = mysql_select_db($db);
if (!$r2) {
    echo "Cannot select database'n";
    trigger_error(mysql_error(), E_USER_ERROR); 
} else {
    echo "Database selected'n";
}

$usernameFromApp = $_GET["f1"];
$nameFromApp = $_GET["f2"];
$passwordFromApp = $_GET["f3"];

 $timeTarget = 0.2; 
 $cost = 9;
 do {
     $cost++;
     $start = microtime(true);
     password_hash($passwordFromApp, PASSWORD_BCRYPT, ["cost" => $cost]);
     $end = microtime(true);
 } while (($end - $start) < $timeTarget);
 $hash = password_hash($passwordFromApp, PASSWORD_BCRYPT, ["cost" => $cost]);
 echo "Appropriate Cost Found: " . $cost . "'n";
 echo $hash."'n";


$name = $_GET["f2"];
$username = $_GET["f1"];
$password = $hash;
//$password = $_GET["f3"];
$query = "INSERT INTO user VALUES ('', '$name','$username','$password')";
mysql_query($query) or die (mysql_error("error"));
mysql_close();

?>

你确定你的服务器上也有PHP 5.5吗?您是否与phpinfo()仔细检查过?

如果是这样,请先删除代码中的while循环。这是来自手册,我知道代码,但它旨在确定您的服务器在特定时间窗口内可以处理多少成本。在生产中不需要它。将其搁置一次并设置成本(或者干脆坚持使用足够好的默认值)。

检查数据库凭据,创建新文件并首先仅调试数据库连接。似乎这就是您面临的问题。确保设置error_reporting(-1)ini_set("display_errors", true),这应该确保在出现问题时从脚本获得响应。

另请注意,自 PHP 5.5 以来,mysql已被弃用,您绝对不应该再使用它,请使用 mysqliPDO

验证任何和所有用户输入,永远不要相信任何东西!

对 SQL 使用预准备语句(mysqliPDO 支持)。