【问题标题】:what's wrong with this sql query?这个 sql 查询有什么问题?
【发布时间】:2010-10-21 09:58:17
【问题描述】:

好的,我在 PHP 中有两个变量

$username;
$password;

初始化为从 $_POST 变量中检索到的数据:)

我有这个 SQL 查询

$sql = "SELECT * FROM users WHERE username = '" . $username . "' AND password = '" . $password . "')";

但这不起作用并且什么也没给我:(

你能指导我正确的方向吗?请问?

【问题讨论】:

  • 请注意,这会引发 sql 注入。

标签: php sql mysql


【解决方案1】:

哎呀!一个人的sql注入!

编辑:What's your favorite "programmer" cartoon?

【讨论】:

  • 不看,我会认为这是小鲍比桌卡通
【解决方案2】:

这有什么问题?

不幸的是,一切。特别是它容易受到 SQL 注入攻击。

如果这是逐字剪切和粘贴,那么它实际上不起作用的原因是结尾的右括号。大概你在调用这个时没有检查错误?

使用基本的 MySQL API 应该是:

$sth = $db->prepare("SELECT COUNT(*) FROM users WHERE username = ? AND password = ?");
$sth->execute($username, $password);
list($count) = $sth->fetchrow();
$authorized = ($count > 0);

或类似(未经测试的代码、E&OE 等...)

【讨论】:

    【解决方案3】:

    查询的末尾无缘无故有一个右括号,它不会工作。

    【讨论】:

    • 我没看到。看到这样的安全风险仍然感到震惊。然而,这可能是最好的答案。删除括号应该可以使代码工作,但不要在生产中使用它。
    【解决方案4】:

    为什么在查询末尾有一个杂散的 ) ?它不应该在那里。

    哦,还有关于 SQL 注入的第三篇文章。不好。

    【讨论】:

      【解决方案5】:

      您的查询字符串末尾似乎有多余的右括号。

      [编辑] - 对于那些尖叫的 SQL 注入攻击:在查询中使用变量之前,我们不知道用户对变量做了什么。怀疑的好处怎么样? ;-)

      【讨论】:

      • 最好告诉他并发现他已经考虑过了,而不是告诉他以防万一他还没有。
      • 除了验证任何输入之外,您还应始终在将数据传递到数据库时对其进行清理。
      • 当然我主张正确处理用户输入的变量。为了清楚起见,我更新了帖子中的笑脸;-)
      【解决方案6】:

      首先,永远,永远这样做。请阅读有关SQL injection 的内容,并且在您理解它所说的内容之前不要编写任何 SQL。抱歉,但这真的很重要。

      也就是说,您的查询包含一个右括号。这看起来像一个语法错误。执行时是否出错?

      【讨论】:

        【解决方案7】:

        查询的右侧有一个额外的括号。

        此外,如果您没有正确清理代码,您将很容易受到 SQL 注入的攻击。您确实应该使用参数化查询,但至少在$username$password 上使用mysql_real_escape_string()

        另外,作为一种幽灵调试,您的密码很可能在数据库中经过 MD5 散列,因为您永远不应该以纯文本形式存储它们。

        试试:

        $username = mysql_real_escape_string($_POST["username"]);
        $password = md5($_POST["password"]);
        
        $sql = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
        

        【讨论】:

          【解决方案8】:

          除了指出的所有其他问题。用户表中的密码是加密存储的。除非您通过 MySQL 密码加密器运行密码,否则您将永远不会看到此查询中的任何数据,因为密码不匹配。

          【讨论】:

          • 你怎么能假设知道密码是如何存储在他的数据库架构中的?
          猜你喜欢
          • 2011-01-15
          • 1970-01-01
          • 2015-08-08
          • 1970-01-01
          • 1970-01-01
          • 2011-09-28
          • 1970-01-01
          相关资源
          最近更新 更多