我正在编写一个搜索功能,使用户可以搜索我的数据库中的特定表。我的网站运行在CodeIgniter上。
对于搜索功能,我使用 $ _ GET 而不是CodeIgniter $ this-> input-get(),因为我在辅助函数中使用后者时遇到了麻烦。
现在,这是一个安全问题:
为了防止XSS和SQL注入,清除和过滤$ _GET数组中的恶意字符的最佳方法是什么?
请记住,$ _GET数组中的数据将用于查询数据库并从中检索信息。
是否有一种递归方式来清理整个$ _GET数组而不必逐个元素?
我应该使用PHP的过滤方法还是CodeIgniter?
任何建议将不胜感激! 提前致谢!
答案 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