2012-06-04 4 views
0

Когда кто-то выполнить этот адрес в моих данных веб-сайта в «пост» таблицы удаляется:SQL Injection в CakePHP 2,0

http://mysite.com/posts/getPosts/29;SET FOREIGN_KEY_CHECKS = 0; удалять из сообщений;

или

http://mysite.com/posts/getPosts/29;set foreign_key_checks = 0;

В настоящее время функция на PostController это:

public function getPosts($idUser, $return = true){ 
    $idUser = Sanitize::clean($idUser);  

    //calling Post Model... 
    $posts = $this->Post->getPosts($idUser); 

}

И да ... им жаль, но у меня есть SQL предложение на сообщение Модель под названием "getPosts". (но я не могу изменить его сейчас ...)

Я думал, что с Sanitize будет достаточно ... Как я могу это решить ?? Есть ли что-то эквивалентное mysql_real_escape_string в CakePHP, когда я работаю со своими собственными функциями SQL?

Спасибо.

+0

Что побуждает вас поверить, что кто-то SQL впрыснул сюда? Торт автоматически защищает от этого. (Также, инъекция тегов! = Sql injection.) – jeremyharris

+0

Я не уверен, где это может быть. Я не уверен, что это SQL-инъекция, но я не знаю другого метода, чтобы удалить таблицу. Любая идея, как бороться против этого? Благодарю. – Alvaro

+0

Вы должны доказать, что кто-то/вещь заставляет таблицу отбрасываться для нас, чтобы помочь. Журналы, тестовые примеры, показывающие ваши методы работы и т. Д. – jeremyharris

ответ

0

то, что вы там делаете, настолько сильно ошибочно и не имеет никакого отношения к sql-инъекции. вы паникуете и лаем по неправильному дереву здесь.

а) вам не нужно utf8_decode() - использование utf8 всей

б) вам не нужно strip_tags() - использование час() вместо того, чтобы в представлении

с) вам не нужно Sanitize - как ненужное as strip_tags

d) ваш код защищен от SQL-инъекций, потому что вы используете save().

НО

ваш код не может быть защищен от формы закаливания.

, так что вы должны применять белый список или некоторые другие основные меры безопасности, например, как использовать компонент безопасности.

для получения более подробной информации о том, как на самом деле сделать разницу: http://www.dereuromark.de/2010/09/21/saving-model-data-and-security/

+0

Я обновил свой вопрос. Ошибка там не была. Во всяком случае, я не знаю, как это решить. – Alvaro

2

CakePHP 2.x будет защищать от инъекции SQL до тех пор, пока вы используете встроенные строитель запросов, как find и save.

Если ваши идентификаторы таблицы являются целыми, есть быстрый и легкий взлом, который обеспечивает хорошую безопасность. Используйте параметр преобразования целочисленного типа PHP в параметре. Он либо преобразуется в правильное значение ID, либо в ноль. Нет необходимости дезинфицировать целочисленное значение.

public function getPosts($idUser, $return = true) 
{ 
    $posts = $this->Post->getPosts((int)$idUser); 
} 

Я делаю это все время в своих моделях, и это хорошая привычка развиваться.