我开始将所有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)在我的代码中设置了这个之后,我如何正确地测试它确实在工作(没有完全擦除我的表等等?)
在开始这个过程之前,我真的需要对这个问题做一些进一步的解释。
非常感谢任何正确方向的资源,建议或指示。
答案 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?)**
我的偏好是提取手动测试的最终查询和广泛使用测试数据库,以便在开发过程中不影响生产数据库的完整性。