-3

アルバム内にページネーションを追加したページがあり、問題なく動作しますが、問題が見つかりました。?page=a や ?page=0.1 のようなページ (?page=1、?page=2 などの整数にはエラーはありません) を確認するために、URL にいくつかの値を入力し、このエラーを表示しました:

「SQL 構文にエラーがあります。7 行目の '-15 , 15' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください」

ユーザーがこのような値を設定しようとすると、セキュリティ上の問題になりませんか? ある種のチェックを適用してこれを防ぐにはどうすればよいでしょうか?

これが私のコードです

$per_page = 15;
$pages_query = mysql_query("SELECT COUNT(`album_id`) FROM `albums` ", $connection);
$pages = ceil(mysql_result($pages_query, 0) / $per_page);

$page = (isset($_GET['page'])) ? (int)$_GET['page'] : 1;

$start = ($page - 1) * $per_page;
$query_get_imgs = "SELECT `albums`.`album_id`,
                                `albums`.`album_name`,
                                COUNT(`images`.`image_id`) AS `image_count`
                                FROM `albums` LEFT JOIN `images`
                                ON `albums`.`album_id`= `images`.`album_id`
                                GROUP BY `albums`.`album_id` ORDER BY `albums`.`album_id` DESC LIMIT {$start} , {$per_page} ";
$get_imgs = mysql_query($query_get_imgs, $connection) or die(mysql_error());
$row_get_imgs = mysql_fetch_assoc($get_imgs);
$totalRows_get_imgs = mysql_num_rows($get_imgs);
4

5 に答える 5

2

これを試して

$page = (isset($_GET['page']) && is_numeric($_GET['page'])) ? (int)$_GET['page'] : 1;
于 2012-09-12T12:46:16.030 に答える
1

この問題を回避するに$startは、 が 0 以上であることを確認する必要があります。

于 2012-09-12T12:51:12.313 に答える
0

そして同じテーマの別のバリエーション;-)

$start = (max(1, $page)-1) * $per_page;
于 2012-09-12T12:47:06.640 に答える
0

ページが 0 から始まる場合

$start = ($page - 1) * $per_page;

$start = -15 and that is wrong because the index start from 0

0 に特殊なケースを指定する必要があります

于 2012-09-12T12:45:03.253 に答える
0

どうif($page<1)ですか?(しかし、いいえ、それはセキュリティリスクではありません)。

于 2012-09-12T12:44:02.803 に答える