PHP SQL注入 - 在数据库中添加名称

问题描述:

  • 假设我想将David O'Neil添加到数据库中。下面是我写的代码:PHP SQL注入 - 在数据库中添加名称

  • test1.php

    <html> 
    <head></head> 
    
    <body> 
    <form action="test1.php" method="post"> 
    Name: <input type="text" name="name" size="30" /><br /> 
    <input type="submit" name="submit" value="Add" /> 
    </form> 
    </body> 
    
    <?php 
    if(isset($_POST['submit'])) 
    { 
        //DB configuration 
        $dbc = mysqli_connect($host, $username, $password, $database) or die(mysqli_connect_error()); 
    
        $staffname = mysqli_real_escape_string($dbc, trim($_POST['name'])); 
        echo $staffname; //David O\'Neil 
    
        $q = "insert into staff (name) values ('$staffname')"; 
        echo $q;   //insert into staff (name) values ('David O\'Neil'); 
    
        $r = mysqli_query($dbc, $q); 
    } 
    ?> 
    
    </html> 
    
  • 从上面的代码,当我在我的数据库中看到的名称,它存储大卫奥尼尔
    为什么?我写错了吗?

+0

有点困惑,在我看来你并没有写错任何东西。你想让SQL注入自己吗? –

+0

为什么,你想把它存储为David O'Neil? –

+0

“\”是为了逃避插件上的''',这就是逃生所做的。如果你在db上运行查询,你会看到它以同样的方式工作。 – chris85

没有,mysqli的景观功能的存在是为了保护您的查询字符串免受攻击,但在数据库中存储该值时,它存储的字符串作为它的原始形式。

但是你不应该使用scape函数来实现安全性。 Google准备好的声明。