How to prevent SQL injections in manually created queries?(如何防止在手动创建的查询中注入SQL?)
本文介绍了如何防止在手动创建的查询中注入SQL?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我使用的是cakephp,据我所知,下面的查询有SQL注入。但问题是如何在相同的查询中解决这个问题。我不想用其他方法。请不要取消投票
Search->query("select * from subcategories where subcat_name like '%".$_GET['searchkey']."%' and subcat_status='active' ");
推荐答案
我不想使用其他方法
您应该使用任何提供所需功能的方法,而不是您喜欢的方法!
此外,您永远不应该在CakePHP中直接访问超全局变量,这只会给您带来麻烦,尤其是在单元测试中。使用请求对象提供的适当的抽象方法,即CakeRequest::query()
。
Cookbook > Controllers > Request and Response objects > Accessing Querystring parameters
使用预准备语句
话虽如此,请使用预准备语句,方法是传递要绑定到Model::query()
的第二个参数的值:
$result = $this->Search->query(
"select * from subcategories where subcat_name like ? and subcat_status='active'",
array('%' . $this->request->query('searchkey') . '%')
);
API > Model::query()
或使用DboSource::fetchAll()
,它也接受参数作为第二个参数:
$db = $this->Search->getDataSource();
$result = $db->fetchAll(
"select * from subcategories where subcat_name like ? and subcat_status='active'",
array('%' . $this->request->query('searchkey') . '%')
);
- Cookbook > Models > Retrieving Your Data > Prepared Statements
- API > DboSource::fetchAll()
手动退出
为了完整性,也可以通过DboSource::value()
,手动转义值,但应避免不惜一切代价以这种方式构建查询字符串,因为一个小错误最终可能导致插入未转义的值,从而产生可能的SQL注入漏洞:
$searchkey = $this->request->query('searchkey');
$db = $this->Search->getDataSource();
$value = $db->value('%' . $searchkey . '%', 'string');
$result = $this->Search->query(
"select * from subcategories where subcat_name like $value and subcat_status='active'"
);
API > DboSource::value()
这篇关于如何防止在手动创建的查询中注入SQL?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:如何防止在手动创建的查询中注入SQL?
基础教程推荐
猜你喜欢
- WooCommerce 中选定产品类别的自定义产品价格后缀 2021-01-01
- 超薄框架REST服务两次获得输出 2022-01-01
- 如何在 PHP 中的请求之间持久化对象 2022-01-01
- 在 Woocommerce 中根据运输方式和付款方式添加费用 2021-01-01
- XAMPP 服务器不加载 CSS 文件 2022-01-01
- 通过 PHP SoapClient 请求发送原始 XML 2021-01-01
- 在多维数组中查找最大值 2021-01-01
- mysqli_insert_id 是否有可能在高流量应用程序中返回 2021-01-01
- 在 PHP 中强制下载文件 - 在 Joomla 框架内 2022-01-01
- Libpuzzle 索引数百万张图片? 2022-01-01