这个 mysql 查询是如何工作的?

Posted

技术标签:

【中文标题】这个 mysql 查询是如何工作的?【英文标题】:how does this mysql query work? 【发布时间】:2017-05-31 02:50:08 【问题描述】:

我的php代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Less-1 SqL Injection master Course by Hitesh Choudhary</title>
        <link rel="stylesheet" href="../index.html_files/freemind2html.css" type="text/css"/>
    </head>
    <body>
        <div style=" margin-top:70px;color:#FFF; font-size:23px; text-align:center">
            <h1><span class="style1">Welcome </span><font color="#FF0000">to SQL injection Master Course </font></h1>
            <h1><span class="style2">Lesson-1</span></h1>
            <h1><span class="style4">Hint : Error based string</span> <br>
                <font size="3" color="#666666">
                <?php
                    //including the mysql connect parameters.
                    include("../sql-connections/sql-connect.php");

                    // take the variables
                    if(isset($_GET['id']))
                    
                        $id=$_GET['id'];
                        //logging the connection parameters to a file for analysis.
                        //$fp=fopen('result.txt','a');
                        //fwrite($fp,'ID:'.$id."\n");
                        //fclose($fp);

                        // connectivity

                        $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
                        $result=mysql_query($sql);
                        $row = mysql_fetch_array($result);

                            if($row)
                            
                                echo '<font color= "#0000ff">';
                                echo 'Your Login name:'. $row['username'];
                                echo "<br>";
                                echo 'Your Password:' .$row['password'];
                                echo "</font>";
                            
                            else
                            
                                echo '<font color= "#900">';
                                print_r(mysql_error());
                                echo "</font>";
                            
                        
                        else  echo "Please input the ID as parameter with numeric value";

                ?>
                </font>
            </h1>
        </div>
        <img border="0" src="img1.gif"   >
        <div class="botton_fix">For more please visit : <a href="http://www.hiteshchoudhary.com" target="_blank">www.hiteshchoudhary.com</a></div>
        </br></br></br>
        <center>
        </center>
    </body>
</html>

我正在尝试使用以下查询 SQL 注入此页面

localhost/example/Less-1/index.php?id=1 order by 100

结果是用户名:some 和密码:some

localhost/example/Less-1/index.php?id=1

结果是用户名:some 和密码:some

我也检查了$id=2,3,...等等,它工作正常 为什么会这样?我应该得到一个错误吧?

【问题讨论】:

我首先建议您不要使用已弃用的 API mysql_*,而是使用 myslqi_* 甚至更好的 PDO。 mysql_* API 已在 PHP v7 中移除 我想你错过了单引号。尝试 ocalhost/example/Less-1/index.php?id=1';删除表用户; # 【参考方案1】:

在这种情况下,数据库查询不会抛出任何错误。如果 id 不等于 session id,你必须抛出异常

if ($_GET['id'] != $_SESSION['id']) 
   throw \Excetption("You don't have access.");

【讨论】:

【参考方案2】:

我不知道,你将如何连接你的数据库并使用连接..所以我已经在代码中编写了数据库连接..如果你有任何问题,请尝试并告诉我。 :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Less-1 SqL Injection master Course by Hitesh Choudhary</title>
        <link rel="stylesheet" href="../index.html_files/freemind2html.css" type="text/css"/>
    </head>
    <body>
        <div style=" margin-top:70px;color:#FFF; font-size:23px; text-align:center">
            <h1><span class="style1">Welcome </span><font color="#FF0000">to SQL injection Master Course </font></h1>
            <h1><span class="style2">Lesson-1</span></h1>
            <h1><span class="style4">Hint : Error based string</span> <br>
                <font size="3" color="#666666">


                <?php


                 //   include("../sql-connections/sql-connect.php");


                if (!$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')) 
                        echo 'Could not connect to mysql';
                        exit;
                    

                    if (!mysql_select_db('mysql_dbname', $link)) 
                        echo 'Could not select database';
                        exit;
                    

                    $sql = "SELECT * FROM users WHERE id='".$id."' LIMIT 0,1";
                    $result = mysql_query($sql, $link);

                    if (!$result) 
                        echo "DB Error, could not query the database\n";
                        echo 'MySQL Error: ' . mysql_error();
                        exit;
                    

                    while ($row = mysql_fetch_assoc($result)) 
                        echo '<font color= "#0000ff">';
                                echo 'Your Login name:'. $row['username'];
                                echo "<br>";
                                echo 'Your Password:' .$row['password'];
                                echo "</font>"
                    

                    mysql_free_result($result);




                ?>
                </font>
            </h1>
        </div>
        <img border="0" src="img1.gif"   >
        <div class="botton_fix">For more please visit : <a href="http://www.hiteshchoudhary.com" target="_blank">www.hiteshchoudhary.com</a></div>
        </br></br></br>
        <center>
        </center>
    </body>
</html>

【讨论】:

以上是关于这个 mysql 查询是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章

我不能让这个查询工作......'mysql''phpmyadmin'

如何加快这个 MySQL 查询

如何优化这个 MySQL 查询

Mysql实战篇之order by是如何工作的--07

Mysql实战篇之order by是如何工作的--07

如何修复此 MySQL 查询使其正常工作?