我有一些工作代码可以解决在pdo预处理语句中手动将每个变量绑定到其参数的繁琐。我循环遍历$_POST
数组,并根据html表单中的名称属性动态地将变量绑定到params。
我的问题是,这样做是否安全?我打开SQL注入吗?
这是我的代码 -
if( !empty($_POST) ){
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname;charset=utf8", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("INSERT INTO planes (name, description) VALUES(:name, :description)");
foreach($_POST as $key => &$value){
$key = ':'.$key;
$stmt->bindParam($key, $value);
}
$stmt->execute();
}
catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
$conn = null;
}
答案 0 :(得分:1)
是的,这很安全。如果您使用参数化查询,则不会受到注入攻击。
话虽如此,似乎你在这里重新发明轮子,这通常不是正确的做事方式。然而;这超出了你的问题的范围。
Also please see this very similar question接受的答案可以这样说:
使用预准备语句和参数化查询。这些是由数据库服务器与任何参数分开发送和解析的SQL语句。这样攻击者就无法注入恶意SQL。