CakePHP 3:用get方法搜索表单并查找条件,如何防止SQL注入?

时间:2015-12-29 12:26:56

标签: cakephp cakephp-3.0

我有一个带有GET方法的HTML表单和五个文本输入字段,它有助于过滤数据。当用户填写一个或多个字段时,这些数据将显示为url query。

我的问题是如何在没有SQL注入的情况下安全地使用此查询数据?

修改 当然,是通过名称,位置等对用户数据进行简单过滤,而不是全文搜索。

'first_name LIKE' => '%'.$this->request->query('first_name').'%'

在文档中哪里解释了bind方法,比如?

->bind(':name', $this->request->query('name'))

2 个答案:

答案 0 :(得分:2)

为避免SQL注入漏洞,您可以使用查询占位符

您的代码应该与

类似
$query = $this->Users->find()
    ->where([
        'first_name LIKE' => '%:name%'
    ])
    ->bind(':name', $this->request->query('first_name'));

更多信息:

答案 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