php+mysql搭建一个简单的sql注入平台

一、环境搭建
环境我使用的XAMPP,搭建php和mysql的环境非常简单。
存在问题:XAMPP中的phpMyAdmin没法使用,没法直接利用phpMyAdmin进行表的创建。
本机环境:win7 x64 +IE8
二、手动在MySql中创建表
    说明:使用XAMPP创建的mysql数据库是一个root密码为空的帐户,利用如下方式进行后,就可以直接操作
    1.mysql的数据库的连接:
    shell> mysql
    --该方式进去后是一个没有权限的帐户。
    shell> mysql -u root
    --该方式进行后是root帐户权限
    2.改数据密码:
    shell> SET PASSWORD FOR 'root'@'localhost' = PASSWORD ('password')
    这种方式改密码后,要登陆数据库,就需要密码,使用如下的命令行
    shell> mysql -u root -p
    password:(回车后出现,在这里输入密码)
    3.创建一个数据库:
    shell>CREATE TABLE tbl_name;
    4.创建一个表:
    下面是一个创建表从简单到复杂的全部过程。
    DROP TABLE test;
    CREATE TABLE test (
        id int,
        name varchar(20)
    );

    DROP TABLE test;
    CREATE TABLE test (
        id int NOT NULL,
        name varchar(20) NOT NULL
    );

    DROP TABLE test;
    CREATE TABLE test (
        id int NOT NULL AUTO_INCREMENT,
        name varchar(20) NOT NULL,
        PRIMARY KEY (id)
    );


    DROP TABLE test;
    CREATE TABLE test (
        id int NOT NULL AUTO_INCREMENT,
        name varchar(20) NOT NULL,
        age int NOT NULL,
        PRIMARY KEY (id)
    );

    DROP TABLE test;
    CREATE TABLE test (
        id int NOT NULL AUTO_INCREMENT ,
        name varchar(20) NOT NULL,
        age int NOT NULL,
        info text NOT NULL,
        PRIMARY KEY (id)
    );

    DROP TABLE test;
    CREATE TABLE test (
        id int NOT NULL AUTO_INCREMENT UNIQUE,
        name varchar(20) NOT NULL DEFAULT 'name',
        age int NOT NULL DEFAULT 0,
        info text NOT NULL,
        PRIMARY KEY (id)
    );

三、PHP相关知识:
    1.PHP表单处理:
    我创建的表单与处理代码在同一个页面中,如下:
    <html>
        <head>
        </head>
        <body>
            <form method="post" action=""> //acetion为空表示_self
                <input type="text" name="id" value="">//查询的输入框
                <input type="submit" name="select" value="查询"> //查询的提交按钮
            </form>
            <div>//将PHP运行的结果显示在这里!!!!
                <?php
                    if(!empty($_POST["id"])){ //这里的$_POST对应的表单中method,“id”对应的是input标签中的name属性。
                        echo "你输入的值为:".$_POSH["id"];
                    }else{
                        echo "你没有输入数据!!!"
                    }

                ?>
            </div>
        </body>
    </html>

    
    2.PHP数据库连接:
    代码如下:
    <?php
        //利用mydqli_connect进行连接,
        $myConn=mysqli_connect("localhost","root","password","test");
        //mysqli_connect(string $hostname, string $user,string password,string dbname)
        //也可以将连接属性写在php.ini中,利用ini_get(属性名)的方式读取
        //在php.ini中有如下属性:
        //mysqli.default_host=
        //mysqli.default_user=
        //mysqli.default_pw或mysqli.default_password=
        //mysqli.default_port=
        //如果在php.ini中加上上述属性,可以直接 用mysqli_connect()进行连接,
        mysqli_select_db($myConn,"db_name");//改变连接数据库,在mysqli_connect中如果没有连接数据库,在操作需使用该方法进行选择。
        if(!$myconn){
            die("ERROR".mysqli_error($myConn));
        }else{
            echo " 连接成功!";
        }
    >

    3.PHP查询结果处理:
    <?php
    //假设我们在上面创建了test数据库test表,test表的结构与练习表创建时的相同。
    //生成sql查询语句
    $sql;
    if(!empty($_POST["id"])){
        $sql="SELECT * FROM test WHERE id=$_POST['id']";
    }else{
        die("请输入查询的值!!");//结束程序!!
    }
    //进行数据库连接
    $myConn=mysqli_connect("localhost","root","password","test");
    //进行判断
    if($myConn){ //此处表示连接成功!
        //执行查询:
        if($result=mysqli_querry($myConn,$sql)){
            //读取结果
            $row_assoc=mysqli_fetch_assoc($result);//将结果集中的一行利用php中关联数组的形式读取
            $row_array=mysqli_fetch_array($result);//将结果集中的一行利用php中数字数组的形式读取,也可以加参数用关联数组或两种方式读取
            /**
             * 默认情况下,mysqli_fetch_array()是以两种方式读取的
             * 方法的原型如下:
             * mixed mysqli_fetch_array ( mysqli_result $result [, int $resulttype = MYSQLI_BOTH ] )
             * MYSQL_NUM:表示用数字数组的方式读取
             * MYSQL_ASSOC:以关联数组的方式读取
             * MYSQL_BOTH:以两种方式读取
             * 该方式读取完一行后,会将结果集中的游标放到下一行,如果结果集中只有一行,则会读取之后游标会指向末尾
             *
             */
            //输出结果
            //直接打印数组:
            print_r($row_assoc);
            //格式化打印:
            printf("id:%s<br>name:%s<br>age:%s<br>info:%s<br>",$row_assoc["id"],$row_assoc["name"],$row_assoc["age"],$row_assoc["info"]);                                    


        }else{
            die("查询失败:".mysqli_error($myConn))
        }
        mysqli_close($myConn);
    }else{//下面的信息表示连接不成功!
        die("error:".mysql_error($myConn)) ;
    }
    >

    4.PHP数据库插入:
    插入数据与查询数据与查询数据的就是将语句进行改变,其流程与使用方式都差不多。
    <?php
    //假设我们在上面创建了test数据库test表,test表的结构与练习表创建时的相同。
    //假设我们在表单中创建了4个文本域,name属性分别为id,name,age,info
    //生成sql插入语句
    $sql;
    if(!empty($_POST["id"])&&!empty($_POST["name"])&&!empty($_POST["age"])&&!empty($_POST["info"])){
        $sql="INSERT INTO test(id,name,age,info) VALUES($_POST['id'],$_POST['name'],$_POST['age'],$_POST['info'])";
    }else{
        die("请输入查询的值!!");//结束程序!!
    }
    //进行数据库连接
    $myConn=mysqli_connect("localhost","root","password","test");
    //进行判断
    if($myConn){ //此处表示连接成功!
        //执行插入:
        if(mysqli_querry($myConn,$sql)){
            echo "插入成功!";
        }else{
            die("插入失败:".mysqli_error($myConn))
        }
        mysqli_close($myConn);
    ?>

四、PHP安全性相关的知识:
    在使用PHP进行数据库操作的时候,有很几个与安全相关的方法,此方法在此不进行学习。利用上面的知识,可以很快速的搭建一个简单的SQL注入练习平台。至于平台的具体形式,要看本人的爱好,随便设计。复杂的话可能需要一点HTML相关的知识。

猜你喜欢

转载自blog.csdn.net/qq490765184/article/details/81841000