Mysql分页负数sql攻击

1 攻击分析

CleverCode的运维同事给我说,他在查看mysql的错误日志的时候,发现有大量的下图的错误,所以有人是在正对某个地址进行攻击。大量出现这个错误的原因是mysql在limit不支持负数。通常我们分页的时候,url一般都是写成http://xxx.com?page=1&pageSize=20,即获取第一页数据。每页20行。但是如果传入的是http://xxx.com?page=-1&pageSize=20。就会出现以下错误。

2 有问题的PHP代码

function getUserLoginLog($page,$pageSize){

    //参数检查
    if(!is_int($page) || !is_int($pageSize)){
        return;
    }

    $start = ($page - 1) * $pageSize;
    $sqlStr = "select * from user_login_log order by id desc limit $start,$pageSize";
    //执行sql语句
    //.....    

    //如果page=-1,pageSize=20,以上语句就会变成
    //$sqlStr = "select * from user_login_log order by id desc limit -40,20";

}

3 防止攻击的PHP代码

只需要判断$page,$pageSize为正整数即可。

function getUserLoginLog($page,$pageSize){

    //参数检查
    if(!is_int($page) || !is_int($pageSize)){
        return;
    }

    //正整数检查
    if($page < 1 || $pageSize < 1){
        return;
    }

    $start = ($page - 1) * $pageSize;
    $sqlStr = "select * from user_login_log order by id desc limit $start,$pageSize";

    //执行sql语句
    //.....    

}

版权声明:

1)原创作品,出自"CleverCode的博客",转载时请务必注明以下原创地址,否则追究版权法律责任。

2)原创地址:http://blog.csdn.net/clevercode/article/details/45935593(转载务必注明该地址)。

3)分类地址:http://blog.csdn.net/clevercode/article/category/3262205博客持续增加,关注请收藏

4)欢迎大家关注我博客更多的精彩内容:http://blog.csdn.net/CleverCode

时间: 2024-11-03 22:04:56

Mysql分页负数sql攻击的相关文章

Mysql 分页查询sql优化

SELECT COUNT(id) FROM ts_translation_send_address EXPLAIN SELECT * FROM ts_translation_send_address ORDER BY id LIMIT 2000000,10; SELECT * from ts_translation_send_address t INNER JOIN ( SELECT ID FROM ts_translation_send_address ORDER BY id limit 20

sqlserver分页;mysql分页;orcale分页 的sql 查询语句

1 一,sqlserver分页: 2 SELECT TOP (每页显示的数据条数) *FROM 表名 WHERE (ID NOT IN (SELECT TOP ((当前页码 -1)*每页显示的数据条数 -1) ID FROM 表名 AS 表名1_1 ORDER BY ID)) ORDER BY ID; 3 二:mysql分页 4 select * from 表名 where id limit((当前页码 -1)*每页显示的数据条数,当前页码 * 每页显示的数据条数); 5 三:orcale分页

MySQL分页优化中的“INNER JOIN方式优化分页算法”到底在什么情况下会生效?

本文出处:http://www.cnblogs.com/wy123/p/7003157.html 最近无意间看到一个MySQL分页优化的测试案例,并没有非常具体地说明测试场景的情况下,给出了一种经典的方案,因为现实中很多情况都不是固定不变的,能总结出来通用性的做法或者说是规律,是要考虑非常多的场景的,同时,面对能够达到优化的方式要追究其原因,同样的做法,换了个场景,达不到优化效果的,还要追究其原因.个人对此场景在不用情况表示怀疑,然后自己测试了一把,果然发现一些问题,同时也证实了一些预期的想法.

springmvc+java+mysql分页条件查询自学代码

jsp: <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <% String path = request.getContextPath(); String b

MySQL管理之SQL语句实例

MySQL管理之SQL语句实例 首先,我们来导入world库,这个world库中的表是mysql ocp考试专用表,在网上有下 mysql> source/root/world_innodb.sql 表结构如下: 本文来自http://yijiu.blog.51cto.com 转载请经博主允许 ,盗帖可耻! CREATE TABLE `Country` (  `Code` char(3) NOT NULL DEFAULT '',  `Name` char(52) NOT NULL DEFAULT

SQL攻击-预编译--缓存

PreparedStatement l 它是Statement接口的子接口: l 强大之处: 防SQL攻击: 提高代码的可读性.可维护性: 提高效率! l 学习PreparedStatement的用法: 如何得到PreparedStatement对象: ¨ 给出SQL模板! ¨ 调用Connection的PreparedStatement prepareStatement(String sql模板): ¨ 调用pstmt的setXxx()系列方法sql模板中的?赋值! ¨ 调用pstmt的exe

MyBatis Generator实现MySQL分页插件

MyBatis Generator是一个非常方便的代码生成工具,它能够根据表结构生成CRUD代码,可以满足大部分需求.但是唯一让人不爽的是,生成的代码中的数据库查询没有分页功能.本文介绍如何让MyBatis Generator生成的代码具有分页功能. MyBatis Generator结合Maven的配置和使用 在实现分页之前,首先简单介绍MyBatis Generator如何使用. MyBatis Generator配置文件 MyBatis Generator通常会有一个xml配置文件,用来指

php+mysql分页优化版

效果图: 1 <table align="center" cellspacing="2"> 2 <?php 3 include('conn/conn2.php'); 4 $pagesize=10; 5 $url=$_SERVER["REQUEST_URI"];//取当前url路径 6 $url=parse_url($url); //查询当前路径所以值 7 $url=$url[path];//查询当前路径path的值 8 9 $n

Mysql 分页语句Limit用法

转载自:http://qimo601.iteye.com/blog/1634748 1.Mysql的limit用法 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能. Sql代码   SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数.LIMIT 接受一个或两个数字参数.参数必须