2012-06-04 101 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); 
} 

我在模型中一直这样做,这是一个很好的开发习惯。