PHP PDO 安全

标签 php mysql security pdo

我是第一次尝试使用 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/

相关文章:

php - 让我的 PHP 表单成功查询数据库以检查电子邮件是否已存在时出现问题

php - 提交表单下载php脚本

mysql - Shell - 一行查询

php - 如何根据where条件值创建mysql查询结果?

mysql - MySQL 上 SQL 注入(inject)安全性的最佳解决方案是什么?

php - 除了导航栏之外,什么会导致 WordPress 管理屏幕空白?

php - 你如何忽略 php 搜索栏中的破折号和逗号

mySQL:子查询到数组?

android - 如何在 android apk 文件中保护 web 服务 url

security - 保护/隐藏 Swagger/OpenAPI 规范文档是否合适?