0

誰かが私のウェブサイトでこの URL を実行すると、「投稿」テーブルのデータが削除されます。

http://mysite.com/posts/getPosts/29;SET FOREIGN_KEY_CHECKS = 0;投稿から削除;

また

http://mysite.com/posts/getPosts/29;setforeign_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

findCakePHP 2.x は、 や などの組み込みのクエリ ビルダーを使用している限り、SQL インジェクションから保護しますsave

テーブル ID が整数の場合、優れたセキュリティを実現する迅速かつ簡単なハックがあります。パラメータで 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) save() を使用しているため、コードは SQL インジェクションに対して安全です。

しかし

コードがフォーム テンパリングに対して安全でない可能性があります。

そのため、少なくともセキュリティコンポーネントを使用するなど、ホワイトリストまたはその他の基本的なセキュリティ対策を実施する必要があります。

実際に違いを生む方法の詳細については、 http ://www.dereuromark.de/2010/09/21/ Saving-model-data-and-security/ を参照してください。

于 2012-06-05T00:04:22.370 に答える