2012-06-04 84 views
0

當有人在在「後」表我的網站數據執行這個網址被刪除:SQL注入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就足夠了... 我該如何解決它?當我使用自己的SQL函數時,CakePHP中有沒有與mysql_real_escape_string等價的東西?

謝謝。

+0

什麼使你相信有人在這裏注入SQL?蛋糕自動防止這種情況。 (另外,標記注入!= sql注入。) – jeremyharris

+0

我不確定它可以在哪裏。我不確定它是否是SQL注入,但我不知道任何其他方法來刪除表。 任何想法如何與此戰鬥?謝謝。 – Alvaro

+0

你必須證明有人/事物正在導致我們爲了幫助而放棄這張桌子。日誌,顯示你的方法工作的測試用例等。 – jeremyharris

回答

0

你在那裏做什麼是非常錯誤的,並且與sql注入無關。 你在這裏恐慌和吠叫錯誤的樹。

一個)你不需要utf8_decode() - 使用UTF8整個

b)中你不需要用strip_tags() - 使用H()中,而不是視圖

c)中你不需要sanitize方法 - 是不必要如strip_tags

d)因爲使用save(),所以您的代碼對SQL注入是安全的。

但是

您的代碼可能不安全,不適用於形式調節。

因此,您應該強制執行白名單或其他基本安全措施,例如至少使用安全組件。

關於如何真正發揮作用的詳細信息:只要你使用內置的查詢生成器像findsave http://www.dereuromark.de/2010/09/21/saving-model-data-and-security/

+0

我已更新我的問題。該錯誤不在那裏。無論如何,我不知道如何解決它。 – Alvaro

2

CakePHP的2.x的將防止SQL注入。

如果你的表ID是整數,那麼這個快捷方便的黑客技術可以提高安全性。在參數上使用PHP的整型轉換器。它將轉換爲正確的ID值或零。沒有必要清理整數值。

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

我在模型中一直這樣做,這是一個很好的開發習慣。