我正在尝试通过检查几个不同的数据库字段来构建一个MySQL查询,以返回适当的搜索结果。例如,如果用户搜索“管道工利兹”,如果一家企业在“城市”字段中有“利兹”,并且名称中有“管道工”一词,我希望返回该搜索结果。
用户搜索可能包含多个单词,并且是不可预测的。我目前正在通过分解搜索词,修剪它,并使用它来编译一个复杂的搜索查询,以返回所有相关的结果,从而实现我所需要的。
我将这个复杂的查询存储在一个变量中,并使用Codeigniter的活动记录来运行该查询。
$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即将被弃用,并且不是一个包罗万象的方法,因此我对此方法的部分担忧。
感谢您的任何帮助
发布于 2013-02-04 09:28:09
我不会说你绝对是“安全的”,因为如果你在SQL查询中接受用户输入,你在技术上永远不会安全(即使你已经操纵过它……有志者事有成)。
一旦放弃了对应用程序的控制,就必须非常小心地处理这些数据,以免受到注入攻击。
XSS Clean将帮助处理POST或cookie数据--它不会在GET变量上自动运行。如果输入来自GET数组,我会手动运行$data = $this->security->xss_clean($data);。
发布于 2013-02-04 06:56:18
倒计时与安全无关。它们实际上只是一种“字符串化”字段和表名的方法,这样您就可以使用一个名为datatype的字段,而不会与mysql关键字冲突。
你很安全
https://stackoverflow.com/questions/14678168
复制相似问题