我已经用google搜索了用户发布的数据并进行了清理,发现了很多示例和函数,但是我还没有找到任何可以帮助我解决困惑的解决方案。
我的问题是,在以下php mysqli内置函数中基本完成了什么:
// Sanitize. example:
$x = mysqli_real_escape_string($con, $posted_val));
PDO或核心php中是否有任何内置功能可以用来清理用户发布的数据?
我试图通过替换可能的可利用代码来使用我自己的函数来清理输入,然后返回结果,但是我希望PDO中也可能存在一些内置函数出口吗?否则我可能错了...
基本上,使用PDO只需对数据进行参数化即可防止SQL注入。如果不进行参数设置,您的数据库仍可用于注入。您可以在将值传递到SQL语句之前自行实施清理操作]
参数化PDO语句的简单示例:
<?php
// Connecting to database with values defined in 'database.php'
include_once 'database.php';
$db = new PDO($DB_DSN, $DB_USER, $DB_PASSWORD);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Function that takes SQL statement and parameters for it
function query($sql, $params = []) {
$stmt = $db->prepare($sql);
// Simple preparing and binding parameters to PDO::prepare()
if (!empty($params)) {
foreach ($params as $key => $val) {
if (is_int($val)) {
$type = PDO::PARAM_INT;
} elseif (is_bool($val)) {
$type = PDO::PARAM_BOOL;
} else {
$type = PDO::PARAM_STR;
}
$stmt->bindValue(':'.$key, $val, $type);
}
}
// Executing SQL
$stmt->execute();
return $stmt;
}
// I declare here simple variables that I'm usually getting from AJAX POST method
$id = "1";
$email = "[email protected]";
// SQL statement
$sql = 'SELECT * FROM `users` WHERE id = :id AND email = :email LIMIT 1';
// Parameters that will pass
$params = ['id' => $id, 'email' => $email];
// Executing SQL and saving return in variable
$result = query($sql, $params);
// Returning result
return $result;
因此,通过这种做法,黑客将无法查看其他任何数据,除非这些数据被传递到变量中并且无法对其进行注入
更多阅读: