PHP MySQL的注入的例子吗? [重复](PHP MySQL injection examp

2019-08-18 23:38发布

这个问题已经在这里有一个答案:

  • 如何防止在PHP中SQL注入? 28个回答

我想用PHP / MySQL的注射登录例子,我的代码如下。

我试图用一个用户名anything' --和一个空的密码,但它不工作,我无法登录。

谁能帮我?

<?php
mysql_connect('localhost','root','root');
mysql_select_db('hp');
?>

<form action="" method="post">
<table width="50%">
    <tr>
        <td>User</td>
        <td><input type="text" name="user"></td>
    </tr>
    <tr>
        <td></td>
        <td><input type="text" name="password"></td>
    </tr>
</table>
    <input type="submit" value="OK" name="s">
</form>

<?php
if($_POST['s']){
    $user = $_POST['user'];
    $pass = $_POST['password'];     
    $re = mysql_query("select * from zend_adminlist where user_name = '$user' and password = '$pass'");

    if(mysql_num_rows($re) == 0){       
        echo '0';
    }else{
        echo '1';
    }
}
?>

Answer 1:

一个最常见的例子是这样的查询:

' or '1'='1

如果你进入这个作为用户名和密码进入一些unsanitized登录输入查询的变化,如下所示:

Original: SELECT * FROM USERS WHERE USER='' AND PASS='';
Modified: SELECT * FROM USERS WHERE USER='' or '1'='1' AND PASS='' or '1'='1';

这将导致其在寻找每一件事情是真实的,因为1永远等于1.问题用这种方法是它不允许特定用户的选择。 这样做,你需要使它被注释掉它在其他例子可见忽略AND语句。



Answer 2:

如果用户名的值是:

 $_POST['user'] = "1' OR 1 LIMIT 1; --";

那么MySQL查询变为:

select * 
from zend_adminlist 
where user_name = '1' OR 1 LIMIT 1; --' and password = '$pass'


文章来源: PHP MySQL injection example? [duplicate]