【问题标题】:Codeigniter Complex MySQL Query - Removing Backticks - is it a Security Issue?Codeigniter 复杂的 MySQL 查询 - 删除反引号 - 这是一个安全问题吗?
【发布时间】:2013-01-18 15:31:05
【问题描述】:

我正在尝试通过检查几个不同的数据库字段来构建一个 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

任何帮助表示赞赏

【问题讨论】:

  • 您能否添加更多细节,尤其是关于您如何编写查询?
  • 谢谢,我在问题中发布了一个链接,显示了这一点

标签: mysql codeigniter backticks


【解决方案1】:

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

你很安全

【讨论】:

    【解决方案2】:

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

    一旦您放弃对应用程序的控制权,您必须非常小心处理这些数据的方式,以免遭受注入攻击。

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

    【讨论】:

    • 我在 POST 数据上使用它,但我相信这个答案会对其他人有所帮助。我认为@jmadsen 的回答也很有帮助,但接受这个作为额外细节的答案。我的用户输入的搜索词也不会被反引号,所以我认为这可能是安全问题的来源——有人可以在搜索词中包含自己的反引号来逃避我的?
    • “转义”支持刻度没有意义 - 最多只会导致您的查询失败。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多