0

こんにちは、私は次の声明を持っています

function count_rows($table_name, $condition = null, $debug = false)
{
    $query_result = $this->query("SELECT count(*) AS count_rows FROM " . $this->db_prefix . $table_name . " " . $condition, $debug);
    $count_rows = $this->sql_result($query_result, 0, 'count_rows');

    return $count_rows;
}

私はFirefox用のsql inject me addonを使用していますが、エラーが発生します

スクリプトの実行中に Mysql エラーが発生しました:

The query you are trying to run is invalid
Mysql Error Output: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '))' at line 2
SQL Query: SELECT count(*) AS count_rows FROM database_auctions a WHERE a.active=1 AND a.approved=1 AND a.deleted=0 AND a.list_in!='store' AND a.catfeat='1' AND a.closed=0 AND (a.category_id IN ())

SQLインジェクションに対してこのクエリをサニタイズする方法??

4

2 に答える 2

1

クエリのこの部分の近くにあるように、次のようになります。

AND (a.category_id IN ())

実際には、サブクエリ/値のリストを指定しません。結果が指定されたcategory_idを保持しているかどうかを判断するには、これを行う必要があります。

SQLインジェクションから保護するために、PHPのmysqli拡張機能を使用することをお勧めします。私は彼らが準備された声明を支持すると信じています。プリペアドステートメントを使用すると、文字列連結の使用が破棄され、サーバーがSQLステートメントを「準備」するため、クエリはサーバーに1回だけ送信され、実際にSQLクエリを実行するとパラメータのみが送信されます。

http://php.net/manual/en/class.mysqli-stmt.php

http://php.net/manual/en/mysqli-stmt.prepare.php

于 2013-01-13T23:19:45.773 に答える
1

を渡すと、$contidionここで括弧の間に何かを忘れているように見えa.category_id IN ()ます。SQL インジェクションを回避するには、これを確認してください

于 2013-01-13T23:23:11.367 に答える