Symfony SQL注入

Symfony SQL Injection

提问人:Matthieu 提问时间:6/14/2023 更新时间:6/14/2023 访问量:97

问:

大家好!
我目前正在修复应用程序中的一个错误,并且有一个我有疑问的代码。

$query = $this->em->createQuery(
            "SELECT client FROM App\\Entity\\Gescom\\Client client WHERE client.name LIKE CONCAT('%', :query, '%')"
        )
            ->setFirstResult(($request->get('page') - 1) * $request->get('page_limit'))
            ->setMaxResults($request->get('page_limit'));
        $query->execute([
            'query' => $request->get('q') . '%'
        ]);

关于这条线:

$query->execute([
            'query' => $request->get('q') . '%'
        ]);

是否存在任何 SQL 注入问题或是否安全?

我在网上搜索过,但找不到问题的答案。即使我在其中连接了某些内容,也可以防止所有 SQL 注入吗?execute()

php symfony SQL注入

评论

1赞 user3783243 6/14/2023
该代码使用 stackoverflow.com/a/7252344/3783243 的方法在绑定(执行)中是多余的,因为您的串联已经这样做了。. '%'CONCAT('%', :query, '%')

答:

2赞 ADyson 6/14/2023 #1

您传递的是参数名称及其值的列表,然后数据库引擎会将其安全地放入 SQL 语句中,以代替匹配的命名占位符(在 SQL 语句中标记)。execute():

因此,在本例中,您实际上并没有将任何内容连接到您的 SQL 中,而是正确地提供了单独的 SQL 语句和参数值列表。数据库引擎将确保参数化值永远不会被视为可执行 SQL 的代码段。

因此,是的,它应该是安全的,不会注入 SQL。