如何在CAKEphp中阻止sql注入

时间:2010-11-09 19:49:01

标签: sql cakephp sql-injection

如何从像这样的页面阻止sql注入...... http://u.neighborrow.com/items/recent

3 个答案:

答案 0 :(得分:17)

  

如果使用CakePHP的ORM方法(例如find()和save())和正确的数组表示法(即数组('field'=> $ value))而不是原始SQL,CakePHP已经保护您免受SQL注入。对于XSS的清理,通常最好将原始HTML保存在数据库中而不进行修改,并在输出/显示时进行清理。

这应该让你知道如何做到这一点。

App::import('Sanitize'); 
class MyController extends AppController {     ...     ... } 

完成后,您可以静态调用Sanitize。

答案 1 :(得分:5)

CakePHP会照顾它。 Read their book

答案 2 :(得分:3)

只有在需要编写原始查询的极少数情况下才需要清理。

原始查询是:

$this->User->query("select username from users where email='$email_received_from_user_form'");

在执行之前你需要:

App::import('Sanitize');

$email_received_from_user_form = Sanitize::paranoid($email_received_from_user_form, array('@', '_', '-', '.'));

如果使用正确的数据清理将删除/编辑查询中的所有恶意字符(无sql注入)。

见这里:http://book.cakephp.org/2.0/en/core-utility-libraries/sanitize.html

在您了解了有关数据清理的所有信息之后,请尽量不要使用它。像这样使用CakePHP方式:

$this->User->field('username', array('email' => $email_received_from_user_form));

在这种情况下,您根本不必担心SQL注入。除非您没有其他选择,否则不应使用原始查询。