【问题标题】:MySQL - Using SHA2 in WHERE ClauseMySQL - 在 WHERE 子句中使用 SHA2
【发布时间】:2014-08-21 05:43:26
【问题描述】:

提前致谢!所以这是我的查询

$query = "
        SELECT
            A.id
            U.email,
            SHA2(U.email, 256) AS sha
        FROM S.Action A
        LEFT JOIN S.Users U
            ON U.ID = A.id
        WHERE A.id = ". $id ."
        ";

效果很好,并且“sha”具有预期值。但是,我想做的是在

中添加这个 WHERE 条件
AND SHA2(U.email, 256) = ". $pass ."

但是一旦输入,查询就会返回任何内容。当我在查询返回后转储 $pass 和 'sha' 时,如果没有 WHERE 条件,它们就会匹配。但是当我试图在所有东西都被抓住之前查看那场比赛时,它什么也没找到。这是我做不到的吗?

【问题讨论】:

    标签: mysql sha256


    【解决方案1】:

    我怀疑在第一个示例中,$userid 是一个整数,并且列 id 也是某种 INT 类型,因此它被转换为整数并且工作正常

    您要添加到查询的第二个 where 子句,SHA2 函数的结果显然不是整数而是字符串,所以它应该用引号引起来:

       $query = "
           SELECT
            A.id
            U.email,
            SHA2(U.email, 256) AS sha
           FROM S.Action A
           LEFT JOIN S.Users U
            ON U.ID = A.id
            WHERE A.id = ". $id ." AND SHA2(U.email, 256) = '".$pass."'";   
    

    请注意,如果此输入来自用户输入,则您需要使用参数,而不是像上面那样将查询连接在一起。这可能会使您的网站遭受 SQL 注入攻击。

    【讨论】:

    • 这很尴尬哈。谢谢
    • 它用于取消订阅电子邮件的人。我对他们的电子邮件进行 sha256 处理,将其与他们的用户 ID 组合成一个字符串,然后对整个字符串进行 base64 编码,然后将其传递到 URL 中。只是想隐藏该信息并提供一些安全字段,以便用户无法开始在 URL 中输入 ID 并取消订阅人员。我正在用 SELECT 进行测试,实际将是一个 DELETE
    • @QuantumScripting 我建议不要为此手动在查询中使用插入,而是使用准备好的语句。如果您从表单提交中提取 $pass(和 $id),那么您对 ​​SQL 注入持开放态度。
    • $pass 和 $id 仅来自电子邮件。这些电子邮件会传递这些信息,而我只是从中提取信息。用户从不提交任何东西。然而,话虽如此,我不熟悉准备好的陈述,所以我会调查一下。谢谢
    猜你喜欢
    • 2010-09-23
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    • 2012-06-16
    • 2014-10-22
    • 2015-10-26
    • 1970-01-01
    • 2015-02-18
    相关资源
    最近更新 更多