假设我们有以下代码(用于某种搜索或类似的):
$stmt = $pdo->prepare("SELECT * FROM users WHERE username LIKE ?");
$stmt->execute(array('%' . $username . '%'));
提供的用户名已正确转义,但字符%
(= 0 或更多任意字符)和_
(= 正好 1 任意字符)被 MySQL 解释为通配符。
我了解用户可以输入%
或_
进行搜索,如果我希望搜索功能正常工作,我应该将其转义。(在喜欢set_pt
并获得setopt
结果的情况下)。
但我的问题是:有人可以利用这个吗?如果是,那么有人如何利用它以及如何防止它?下面的功能就够了吗?
function escape_like_string($str) {
return str_replace(Array('%', '_'), Array('\%', '\_'), $str);
}
我能想到的一种可能性是输入 吨%
,因此服务器需要分配大量内存。这行得通吗?