Mysqli和逃脱字符串?

时间:2015-04-01 08:56:37

标签: php database

我开始将所有MySQL转换为MySQLi。

我一直在做很多研究,但发现有点令人困惑。

关于此事,我现在有两个问题:

1)“逃避”一个字符串到底是什么意思?这个代码在哪里去了?我假设它使用我的数据库登录凭据进入我的页面。

我发现以下内容但发现有点难以理解:

“我们将使用mysqli_real_escape_string()函数。由于它需要数据库连接,我们将继续将其包装在自己的函数中。此外,由于我们只需要转义字符串,我们不妨引用价值在同一时间:“

`

 function db_quote($value) {
    $connection = db_connect();
    return "'" . mysqli_real_escape_string($connection,$value) . "'";
    }

` “如果我们不确定我们传递给数据库的值的类型,最好将其视为字符串,转义并引用它。让我们看一个常见的例子 - 表单提交。我们将使用我们以前的INSERT查询用户输入:“

`

// Quote and escape form submitted values
$name = db_quote($_POST['username']);
$email = db_quote($_POST['email']);
// Insert the values into the database
$result = db_query("INSERT INTO `users` (`name`,`email`) VALUES (" . $name . "," . $email . ")");

` 2)在我的代码中设置了这个之后,我如何正确地测试它确实在工作(没有完全擦除我的表等等?)

在开始这个过程之前,我真的需要对这个问题做一些进一步的解释。

非常感谢任何正确方向的资源,建议或指示。

1 个答案:

答案 0 :(得分:0)

转义字符串意味着将在查询中视为特殊字符的字符转换为文字字符。一个很好的例子是单引号。这在查询中具有特殊含义,攻击者可以使用它来更改查询的功能以绕过安全性。转义该字符使其在查询中不起作用,使其仅对字符串值有贡献。有关详细信息可以通过研究SQL注入攻击找到。

至于它的位置,无论何时构建具有不受控制值的查询,都应该转义这些值。

**After I have this set up in my code, how do I properly test that it is indeed working (Without completly wiping out my tables, etc?)**

我的偏好是提取手动测试的最终查询和广泛使用测试数据库,以便在开发过程中不影响生产数据库的完整性。