如何从像这样的页面阻止sql注入...... http://u.neighborrow.com/items/recent
答案 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注入。除非您没有其他选择,否则不应使用原始查询。