LIKE运算符的MySQL注入
这个问题在这里已经有了答案:
任何操作员都可以无需绑定地注入。
$_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