0

Zend Framework 2 に sql クエリがあります。うまく機能しますが、$sessionId をエスケープするのを忘れていました。変数を保護して、誰も SQL クエリを挿入できないようにするためです。これが私のSQLクエリです:

    SELECT parent.category_name, parent.category_id ,COUNT(product.product_id) AS count, 
    (select count(*) from Categories parent2 
    where parent.category_left > parent2.category_left
    and parent.category_right < parent2.category_right) as level
    FROM Categories parent
    LEFT OUTER JOIN Categories node 
    ON node.category_left BETWEEN parent.category_left AND parent.category_right
    LEFT OUTER JOIN products product
    ON node.category_id = product.product_category_id
    WHERE product.product_shop_id = '.$sessionId.'
    GROUP BY parent.category_name
    ORDER by node.category_left;

これを Zend の $select オブジェクトに記述できたので、この Zend は自分でそれをエスケープしていたでしょう。このSQLクエリを使用してこの変数をエスケープする方法はありますか? (mysql_real_escape_string() も試しましたが、この関数は古すぎて使用できません。

ご挨拶 =)

4

1 に答える 1

0

これを行うための方法はたくさんあります..次の質問をチェックしてください: PHP で SQL インジェクションを防ぐにはどうすればよいですか?

PHP で一般的なクエリをエスケープするための利点とともに、少なくとも 4 ~ 5 の異なる方法について説明します。

明確にするために、ここのメソッドは Zend Framework に固有のものではありません..しかし、mysql_real_escape_string も固有ではありません:)

また、PDO を使用したくない場合 (ほとんどの人が推奨しています)、mysql_real_escape_string に問題はありません。危険なものとして使用するには古すぎるとは思いません-同じことを達成するためのより現代的な方法があります。

于 2012-08-21T08:32:49.207 に答える