我是第一次尝试使用 PDO,我只是想知道我正在做的事情有多安全,我也是 PHP 的新手。
我有一个查询,当用户通过我的页面时,该页面使用 GET 获取一个变量然后运行。
对于 PHP,我总是使用 mysql_real_escape 来清理我的变量。
任何人都可以看到它的安全漏洞吗?
// Get USER ID of person
$userID = $_GET['userID'];
// Get persons
$sql = "SELECT * FROM persons WHERE id =$userID";
$q = $conn->query($sql) or die($conn->error());
while($r = $q->fetch(PDO::FETCH_LAZY)){
echo '<div class="mis-per">';
echo '<span class="date-submitted">' . $r['date_submitted'] . '</span>';
// MORE STUF
echo '</div>';
}
最佳答案
不要使用查询,使用准备:
http://php.net/manual/de/pdo.prepare.php
$userID = $_GET['userID'];
$sql = "SELECT * FROM persons WHERE id = :userid";
$q = $conn->prepare($sql)
$q->execute(array(':userid' => $userID ));
while($r = $q->fetch(PDO::FETCH_ASSOC)){
echo '<div class="mis-per">';
echo '<span class="date-submitted">' . $r['date_submitted'] . '</span>';
// MORE STUF
echo '</div>';
}
SQL 语句可以包含零个或多个命名 (:name) 或问号 (?) 参数标记,当语句执行时,这些参数标记将被替换为实际值。
关于PHP PDO 安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11450121/