-3

我有一个页面,我在专辑中添加了分页并且工作得很好,但是我发现了一个问题。为了检查目的,我在 url 中输入了一些值,例如 ?page=a 或 ?page=0.1 (使用 ?page=1、?page=2 等整数没有任何错误)并显示此错误:

“您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以在第 7 行的 '-15 , 15' 附近使用正确的语法”

因此,如果用户尝试输入这样的值,那不是安全问题吗?如何应用某种检查并防止这种情况发生?

这是我的代码

$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

怎么样if($page<1)?(但不,这不是安全风险)。

于 2012-09-12T12:44:02.803 回答
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

以及同一主题的另一个变体;-)

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