【问题标题】:MYSQL - problems with special characters when hashing with CRYPTMYSQL - 使用 CRYPT 散列时出现特殊字符的问题
【发布时间】:2015-12-29 18:27:13
【问题描述】:

我正在尝试使用 PHP 和 mysql 创建一个用户系统。我在数据库中创建了一个名为 userz 的表并设置了我需要的所有内容。只要哈希不生成任何特殊字符,我的代码 100% 就可以工作,所以它随机成功。我尝试将 mysql 中的编码设置为多种 utf-8 并且我尝试了 header('Content-Type: text/html; charset=utf-8');在我的 php 脚本中,但我无法让它工作!

$salt = mcrypt_create_iv(22, MCRYPT_DEV_URANDOM);
$enc= base64_encode($salt);
$hash = crypt($passwordz, $salt);
$qry = "INSERT INTO `userz` VALUES('0', '$fname', '$lname', '$email', '$hash', '$enc')";

mysql_query($qry) or die ($enc.$hash);
echo "Account created!";

它总是会死,我会看到这样的角色:�

也许我需要先转义我的查询?有任何想法吗?谢谢! (顺便说一句,如果您看到任何安全问题,请随时发表评论)。

【问题讨论】:

  • 看起来像 wring 编码。检查数据库、数据库连接、文件、标题等
  • @bish 是的,就是这样。我已经尝试了几乎所有东西,但仍然无法正常工作。但我想我会继续尝试……
  • 不要在 SQL 语句中使用 $variable,使用绑定变量。它将解决您的问题,并使您的代码更安全。请参阅此示例:stackoverflow.com/questions/23511341/…
  • 您真的不应该再编写依赖于mysql_ 函数的代码了。 MySQL 扩展已被弃用多年,并将在今年晚些时候即将发布的 PHP7 版本中删除。另见Why shouldn't I use mysql_* functions in PHP?。在最新的服务器上,此代码的生命周期约为 2 个月。试试 PDO,它也应该可以解决您似乎遇到的 SQL 注入问题。

标签: php mysql utf-8 character crypt


【解决方案1】:

黑色菱形问号通常来自

  1. 您的字节以 latin1(不是 utf8)编码。
  2. 您尚未指定 SET NAMES utf8。你应该使用mysqli_*接口,而不是mysql_*l,然后使用set_charset('utf8')。
  3. 您确实在 html 的元标记中指定了 UTF-8。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-28
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    • 2011-04-05
    • 2016-09-04
    相关资源
    最近更新 更多