我有一个带有GET方法的HTML表单和五个文本输入字段,它有助于过滤数据。当用户填写一个或多个字段时,这些数据将显示为url query。
我的问题是如何在没有SQL注入的情况下安全地使用此查询数据?
修改 当然,是通过名称,位置等对用户数据进行简单过滤,而不是全文搜索。
'first_name LIKE' => '%'.$this->request->query('first_name').'%'
在文档中哪里解释了bind方法,比如?
->bind(':name', $this->request->query('name'))
答案 0 :(得分:2)
为避免SQL注入漏洞,您可以使用查询占位符。
您的代码应该与
类似$query = $this->Users->find()
->where([
'first_name LIKE' => '%:name%'
])
->bind(':name', $this->request->query('first_name'));
更多信息:
Query::bind()
答案 1 :(得分:1)
您应该考虑使用Search Plugin
它非常简单,在控制器中写这个
public $components = array(
'Search.Prg'
);
public function index() {
$this->Prg->commonProcess();
$this->set('users', $this->paginate($this->Users->find('searchable',
$this->Prg->parsedParams())));
}
这个在Model
中public $filterArgs = array(
'first_name' => array(
'type' => 'like',
'field' => 'first_name'
)
);
public function initialize(array $config = []) {
$this->addBehavior('Search.Searchable');
}
你已经完成了。
有关更多示例,请访问here