正确转义SQL查询中的用户输入


Properly escaping user-input in SQL query for laravel

我目前正在我的Laravel 5应用程序中实现搜索功能。现在我有以下代码:

$terms = implode("* ", explode(" ", trim($query)." "));
$sql = "MATCH(title, content) AGAINST('".$terms."' IN BOOLEAN MODE)";
$results = Post::whereRaw($sql);

其中$query是用户提供的字符串。该代码从用户获取(空格分隔)关键字,并对其进行全文搜索。问题是一个简单的'可以破坏SQL查询并允许SQL注入。预防这种情况的最好方法是什么?

您可以对whereRaw使用PDO绑定,它将负责转义传递的参数:

$terms = implode("* ", explode(" ", trim($query)." "));
$sql = "MATCH(title, content) AGAINST(? IN BOOLEAN MODE)";
$results = Post::whereRaw($sql, [$terms]);