【问题标题】:mcrypt_encrypt on string containing ":" (colon)包含“:”(冒号)的字符串上的 mcrypt_encrypt
【发布时间】:2013-04-28 11:06:15
【问题描述】:

我的 Web 应用程序从客户端获取 URL 对象,使用 mcrypt_encrypt 对其进行加密,并将结果以 LONGTEXT 类型存储在 MySQL 数据库中。整个事情如下图完成:

    /* $copied below is received from user and can be any string. But I'm just using a URL as example,as that's where it fails */
    $copied = "http://www.google.com"
    $encCopied = mcrypt_encrypt(MCRYPT_RIJNDAEL_128,$encryption_key,$copied,MCRYPT_MODE_CFB);

    $copystuff = "UPDATE LinkTable set copied='$encCopied'";

    mysqli_query($db,$copystuff)

执行此代码时,最后一行的 MYSQL 查询失败并出现“语法错误”。经过大量的调试,其中涉及手动更改上述 php 中的 $copied 变量,我终于发现这是因为 $copied 变量中的冒号(“:”)而发生的。当我将 $copied 更改为 www.google.com 时,不会引发 SQL 语法错误,一切正常。但是,如果我将 $copied 更改为 :www.google.com ,SQL 再次给出语法错误。

请注意,此代码适用于所有其他类型的字符串,但仅当存在冒号时才会失败。我的假设是mcrypt_encrypt 将冒号加密成一些 MYSQL 无法处理的不可行的东西。

当出现冒号时,显示的错误是这样的:
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'wcÀeHÿë%†‚;/æ1ÎíëO¤SÌÎúR²#•Wwðg T¥4ª¨\£%@‚y' 附近使用正确的语法

关于为什么会发生这种情况的任何意见?现在,我通过在从 URL 中删除 http:// 部分后发送 URL 来使应用程序工作。

谢谢。

【问题讨论】:

    标签: php javascript mysql encryption mcrypt


    【解决方案1】:

    我确定在某个地方有一个字符正在破坏 SQL。尝试转义您的加密字符串:

    $copystuff = "UPDATE LinkTable set copied='" . mysqli_real_escape_string($encCopied) . "'";
    

    【讨论】:

      猜你喜欢
      • 2015-09-09
      • 1970-01-01
      • 1970-01-01
      • 2020-02-24
      • 2021-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-31
      相关资源
      最近更新 更多