此代码源是否来自 SQL 注入的 "Safe"?
Would this source of code be "Safe" from SQL injections?
以下代码源是否可以免受 SQL 注入攻击?如果没有,您能否提供一种使其更安全的方法?
请注意:为了安全起见,在进行此 post 时隐藏了数据库凭据。
PHP版本:7.0
<?php
try{
$handler = new PDO('mysql:host=localhost;dbname=hidden', 'hidden', 'hidden');
//**$handler->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e){
echo $e->getMessage();
}
$myID = 8869935;
$query = $handler->prepare('SELECT * FROM Calls WHERE UserID=:cid');
$query->bindParam(':cid', $myID);
$query->execute();
while($row = $query->fetch()){
echo $row['CallerID'], '<br>';
}
?>
有一种简单的方法可以判断这是否不受 SQL 注入漏洞的影响:
查询字符串没有 PHP 个与其串联的变量:
$handler->prepare('SELECT * FROM Calls WHERE UserID=:cid');
这只是一个字符串,没有 PHP 变量或 PHP 常量。它是一个固定的字符串,在将它提供给 prepare() 函数之前没有任何修改。这足以保证它不会受到 SQL 注入的影响。
查询参数的绑定变量无法引入 SQL 注入。查询由 RDBMS 解析 before 结合变量。在 查询被解析后,SQL 注入无法修改查询 。
以下代码源是否可以免受 SQL 注入攻击?如果没有,您能否提供一种使其更安全的方法?
请注意:为了安全起见,在进行此 post 时隐藏了数据库凭据。
PHP版本:7.0
<?php
try{
$handler = new PDO('mysql:host=localhost;dbname=hidden', 'hidden', 'hidden');
//**$handler->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e){
echo $e->getMessage();
}
$myID = 8869935;
$query = $handler->prepare('SELECT * FROM Calls WHERE UserID=:cid');
$query->bindParam(':cid', $myID);
$query->execute();
while($row = $query->fetch()){
echo $row['CallerID'], '<br>';
}
?>
有一种简单的方法可以判断这是否不受 SQL 注入漏洞的影响:
查询字符串没有 PHP 个与其串联的变量:
$handler->prepare('SELECT * FROM Calls WHERE UserID=:cid');
这只是一个字符串,没有 PHP 变量或 PHP 常量。它是一个固定的字符串,在将它提供给 prepare() 函数之前没有任何修改。这足以保证它不会受到 SQL 注入的影响。
查询参数的绑定变量无法引入 SQL 注入。查询由 RDBMS 解析 before 结合变量。在 查询被解析后,SQL 注入无法修改查询 。