php - PDO::prepare 和 PDO::quote 完全安全吗?

标签 php mysql database security pdo

我正在使用 PDO 包来管理我的应用程序数据库。 我用PDO::prepare , PDOStatement::execute有时PDO::quote , PDO::query / PDO::exec执行我的查询

PDO::preparePDO::quote完全安全?或者我应该做更多的工作来正确验证我的输入。不仅对于数据库而且对于 php 代码 谢谢

最佳答案

使用prepare()并没有什么神奇之处。您可以将不安全变量插入字符串中,然后准备该字符串。 Boom——SQL 注入(inject)。准备一份声明并不意味着它就安全。

$stmt = $pdo->prepare("SELECT * FROM MyTable WHERE id = {$_POST['id']}"); // UNSAFE!

使用参数使其安全。

$stmt = $pdo->prepare("SELECT * FROM MyTable WHERE id = ?");
$stmt->execute([$_POST['id']]); // SAFE!

人们自然会说“使用准备好的语句”,因为您必须使用准备好的语句才能使用参数。但仅仅说“使用准备好的语句”有点没有捕获重点,一些开发人员产生了错误的理解。

<小时/>

PDO quote() 方法也很安全,但我发现它更简单且更容易使用参数。

$idQuoted = $pdo->quote($_POST['id']);
$stmt = $pdo->prepare("SELECT * FROM MyTable WHERE id = $idQuoted");

关于php - PDO::prepare 和 PDO::quote 完全安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44446229/

相关文章:

php - 在网格类型而不是列表中对齐产品?

sql - 如何将服务器1中的一张表传输到服务器2中的表?

sql - 合并两个都有联结表的 SQLite 数据库

php - 使用选择器时传递函数参数的好方法是什么?

mysql - 通过JPA向MySQL添加新列

php - 比较文本框和下拉数据库

mysql - 更新语句中不存在需要更多时间

ruby-on-rails - 数据库索引如何使搜索更快

php - Prestashop Webservice api url 重定向

php - 登录凭据安全 PHP MySQL