0

当有人在我的网站上执行此 url 时,“post”表中的数据被删除:

http://mysite.com/posts/getPosts/29;SET FOREIGN_KEY_CHECKS = 0;从帖子中删除;

或者

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

目前 PostController 的功能是这样的:

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

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

}

是的......我很抱歉,但我在 Post Model 有一个名为“getPosts”的 SQL 语句。(但我现在不能改变它......)

我认为使用 Sanitize 就足够了……我该如何解决?当我使用自己的 SQL 函数时,CakePHP 中是否有任何与 mysql_real_escape_string 等效的东西?

谢谢。

4

2 回答 2

2

只要您使用内置的查询构建器,例如find和 , CakePHP 2.x 就会防止 SQL 注入save

如果您的表 ID 是整数,那么有一个快速简单的 hack 可以提高安全性。在参数上使用 PHP 的整数类型转换器。它将转换为正确的 ID 值或零。无需清理整数值。

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

我一直在我的模型中这样做,这是一个养成的好习惯。

于 2013-08-06T12:04:22.287 回答
0

你在那里做的事情非常错误,与sql注入无关。您在这里惊慌失措并吠叫错误的树。

a) 你不需要 utf8_decode() - 始终使用 utf8

b) 你不需要 strip_tags() - 在视图中使用 h()

c) 你不需要消毒 - 像 strip_tags 一样不必要

d) 你的代码对 SQL 注入是安全的,因为你使用了 save()。

您的代码可能对表单回火不安全。

所以你应该强制白名单或其他一些基本的安全措施,比如至少使用安全组件。

有关如何真正发挥作用的更多详细信息:http: //www.dereuromark.de/2010/09/21/saving-model-data-and-security/

于 2012-06-05T00:04:22.370 回答