mysql - Codeigniter 复杂的 MySQL 查询 - 删除反引号 - 这是一个安全问题吗?

标签 mysql codeigniter backticks

我正在尝试通过检查几个不同的数据库字段来构建一个 MySQL 查询以返回适当的搜索结果。例如,如果用户搜索“plumber leeds”,如果一家企业在“城市”字段中有“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

感谢任何帮助

最佳答案

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

你很安全

关于mysql - Codeigniter 复杂的 MySQL 查询 - 删除反引号 - 这是一个安全问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14678168/

相关文章:

MySQL:日期字段的 CURRENT_TIMESTAMP 在本地有效但在服务器上无效

mysql - 无法从自索引数据库对象中删除记录

php - 更新Mysql数据

php - 将数据插入数据库并使用 CodeIgniter 显示

codeigniter - Codeigniter 4 中的多个类似条件

php - CodeIgniter 站点 Url 和基本 Url 之间的区别

php - ISSET PHP mysql

perl - 如何在 Perl 中使用反引号捕获两个不同变量中的 STDOUT 和 STDERR

mysql - Bash 和 MySQL 变量错误

perl - 如何在反引号内正确使用perl变量名?