在简单的场景中,用户输入用于使用SQL LIKE过滤数据,是否有任何特殊字符我应该注意?
$input = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING);
// Should I strip characters like '%'?
$sth = $db->prepare("SELECT `id` FROM `names` WHERE `name` LIKE :name");
$sth->execute(['name' => $input . '%']);
我指的是任何可能会大大减慢查询速度/消耗CPU并因此用于恶意目的的事情。
答案 0 :(得分:1)
你需要关心 $ input ,它会包含逗号或引号
答案 1 :(得分:1)
您应该转义用于通配符匹配的字符。
有关此操作的详细讨论,请参阅Escaping MySQL wild cards。