我有一个页面,在其中我在相册中添加了分页,工作得很好,但我发现了一个问题。出于检查目的,我在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);
尝试这个
$page = (isset($_GET['page']) && is_numeric($_GET['page'])) ? (int)$_GET['page'] : 1;
要避免此问题,需要检查$start
是否大于或等于0。
if($page<1)
怎么样?(但不,这不是安全风险)。
当页面从0 开始时
$start = ($page - 1) * $per_page;
$start = -15 and that is wrong because the index start from 0
您需要给0一个特殊情况
以及同一主题的另一变体;-)
$start = (max(1, $page)-1) * $per_page;