1

我正在尝试通过检查几个不同的数据库字段来构建一个 MySQL 查询以返回适当的搜索结果。例如,如果用户搜索“plumber leeds”,如果企业在“city”字段中有“leeds”,并且名称中包含“plumber”一词,我希望返回该搜索结果。

用户搜索可能包含多个单词并且是不可预测的。我目前正在通过扩展搜索词、修剪它并使用它来编译复杂的搜索查询以返回所有相关结果来实现我所需要的。

我将这个复杂的查询存储在一个变量中,并使用 Codeigniter 的 Active Record 来运行查询。

$this->db->where($compiled_query, null, false);

我担心的是我没有用反引号保护查询,我不确定这是否是一个安全问题。我启用了 XSS Clean 但仍然不确定这是否可以。

根据 CI 的用户手册: $this->db->where() 接受可选的第三个参数。如果您将其设置为 FALSE,CodeIgniter 将不会尝试使用反引号保护您的字段或表名。

来源:http ://ellislab.com/codeigniter/user-guide/database/active_record.html

关于我如何在一个单独的问题中编译查询的一些信息。我知道 mysql_real_escape_string 即将被弃用并且不是包罗万象的,因此我对此方法的部分担忧。

https://stackoverflow.com/questions/13321642/codeigniter-active-record-sql-query-of-multiple-words-vs-multiple-database-fi

任何帮助表示赞赏

4

2 回答 2

3

反引号与安全无关。它们实际上只是一种“字符串化”您的字段和表名的方法,这样您就可以使用名为datatypeexample 的字段而不会与 mysql 关键字发生冲突

你很安全

于 2013-02-03T22:56:17.827 回答
1

我不会说你是绝对“安全的”,因为如果你在 SQL 查询中接受用户输入,你在技术上永远不会安全(即使你已经操纵了它......只要有意愿,就有办法)。

一旦放弃对应用程序的控制权,就必须非常小心处理这些数据的方式,以免让自己面临注入攻击。

XSS Clean 将帮助处理POSTcookie 数据——它不会在GET变量上自动运行。$data = $this->security->xss_clean($data);如果它来自GET数组,我会手动运行输入。

于 2013-02-04T01:28:09.107 回答