LIKE运算符的MySQL注入

这个问题在这里已经有了答案:

  • 我如何防止PHP中的SQL注入? 28个答案

  • 任何操作员都可以无需绑定地注入。

    $_POST['search'] = "1%'; DROP TABLE myTable LIKE '%";
    

    将使

    .... AND tags,title,text LIKE '%1%'; DROP TABLE myTable LIKE '%%'
    

    阅读如何绑定参数。


    当然这可以注入,你需要清理你的输入。 现在,您正在使用原始数据并将其插入到SQL语句中。

    你应该通过某种数据清理来运行你的POST数据,比如mysql_real_escape_string之类的东西

    或者至少准备好陈述。 让服务器端代码为您完成工作。


    永远不要使用这样的数据库查询,不要使用变量构造字符串并将其用于数据库活动。

    通过将变量插入到字符串中,构建一个稍后准备和执行的字符串,使其不像“命令”那样起作用,而成为“值”。

    你可以这样做:

    $query = "SELECT * from products WHERE shop_id = :shopId;"; // An example, you can finish the rest on your own.
    

    现在,您可以准备声明(我建议为此使用PDO)。

     $statement = $db->prepare($query); // Prepare the query.
    

    现在您可以在准备好的查询中执行变量:

    $statement->execute(array(
        ':shopId' => $_SESSION['shop_id']
    ));
    

    如果你插入或更新,那么你会想做的事情:

    $success = $statement->execute(array(
        ':shopId' => $_SESSION['shop_id']
    ));
    

    它在$ success中存储一个布尔值,或者如果您正在SELECTing中,则可以从结果中获取值:

    $statement->execute(array(
        ':shopId' => $_SESSION['shop_id']
    ));
    $result = $statement->fetch(PDO::FETCH_ASSOC);
    if($result )
    {
        // You can access $result['userId'] or other columns;
    }
    

    请注意,实际上应该将它作为函数,并将$ shopId传递给函数,但不传递会话本身,并检查会话是否真实存在。

    我推荐使用关于如何使用PDO的搜索功能,或者看一看我的例子之一:如何使用一些{$ variable}来编写更新查询

    链接地址: http://www.djcxy.com/p/16743.html

    上一篇: MySQL Injection by LIKE operator

    下一篇: php mysqli insert variables query