当前位置:  开发笔记 > 编程语言 > 正文

你如何逃避CakePHP中的SQL数据?

如何解决《你如何逃避CakePHP中的SQL数据?》经验,为你挑选了1个好方法。

由于某种原因,该AppModel->updateAll()方法不会转义传递给它的数据.查看文档,我找不到任何关于如何使用CakePHP实际转义数据的内容.

datasources/dbo/dbo_mysql.php我找到了value()似乎只是使用的方法mysql_real_escape_string()- 但是如何在模型中从上面访问该方法?



1> Galen..:

对于CakePHP的大多数模型函数,您不必担心转义输入.

如果您使用CakePHP已经保护您免受SQL注入:

    CakePHP的ORM方法(例如find()save())加:

    正确的数组表示法(即. array('field' => $value))而不是原始SQL.

对于针对XSS的清理,通常更好的是将原始HTML保存在数据库中而不进行修改并在输出/显示时进行清理.

请参阅https://book.cakephp.org/2.0/en/core-utility-libraries/sanitize.html 但是,当您需要运行自定义SQL查询或子查询时,还有其他情况.在这些情况下,您可以:

使用准备好的陈述

$db->fetchAll(
    'SELECT * from users where username = :username AND password = :password',
    ['username' => 'jhon','password' => '12345']
);

自定义转义 Model->getDataSource()->value()

$sql = 'SELECT * FROM table WHERE name = ' 
     . $this->MyModel->getDataSource()->value($untrustedInput, 'string') . ';'

value()函数基本上转义并添加如下引号:

"'" . mysql_real_escape_string($data, $this->MyModel->getDataSource()->connection) . "'"

消毒班

曾经是一个选项,但自CakePHP 2.4起就被弃用了.


对于**SOME**ORM函数(疯狂吧?)这是真的,但是当涉及到updateAll()方法时则不然.但是,你发布的那个链接引导我去`Sanitize :: escape(string $ string,string $ connection)`所以我只需要弄清楚如何获取连接名称.
@dereferenced要使用模型中[link](http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#model-query)中描述的`value()`方法,你可以使用`$ dataSource = $ this-> getDataSource();`然后`$ escapedValue = $ datasource-> value($ rawValue);`在控制器中,使用`$ dataSource = $ this-> ModelName-> getDataSource(); `其中ModelName是可从该控制器访问的任何模型的名称.
推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有