如果我使用CodeIgniter,清理$ _GET进行数据库搜索的最佳方法是什么?

时间:2013-01-26 14:47:35

标签: php mysql codeigniter

我正在编写一个搜索功能,使用户可以搜索我的数据库中的特定表。我的网站运行在CodeIgniter上。

对于搜索功能,我使用 $ _ GET 而不是CodeIgniter $ this-> input-get(),因为我在辅助函数中使用后者时遇到了麻烦。

现在,这是一个安全问题:

为了防止XSS和SQL注入,清除和过滤$ _GET数组中的恶意字符的最佳方法是什么?

请记住,$ _GET数组中的数据将用于查询数据库并从中检索信息。

是否有一种递归方式来清理整个$ _GET数组而不必逐个元素?

我应该使用PHP的过滤方法还是CodeIgniter?

任何建议将不胜感激! 提前致谢!

2 个答案:

答案 0 :(得分:4)

Codeigniter默认禁用$ _GET。使用URI类可以模拟$ _GET变量:

GET parameters in the URL with CodeIgniter

你可以破解它并使用$ _GET,听起来你已经完成了。但我不建议这样做。您应该使用CodeIgniter's Input class。这提供了XSS过滤,您可以通过运行:

来清理整个$ _GET数组
$this->input->get(NULL, TRUE); // returns all GET items with XSS filter 

如果使用Codeigniter的数据库实用程序类来运行查询,则它具有内置的转义功能。请查看转义查询部分。

http://ellislab.com/codeigniter/user-guide/database/queries.html

答案 1 :(得分:2)

您可以使用$ this-> db-> escape($ variable)来转义查询中的值。强烈建议使用CI的输入类。

阅读详情:http://ellislab.com/codeigniter/user-guide/database/queries.html