【发布时间】:2012-11-01 10:39:56
【问题描述】:
所以我正在寻找 PDO 来替换我的 php.ini 中的所有 mysql 查询。我这样做的主要原因是为了安全和易于编码。不过,我只是想知道,就安全性而言。一旦我完成替换任何 mysql 查询调用以及我使用 PDO 从用户那里捕获的任何数据,我应该考虑在查询的准备和执行之间放置什么?或者那会照顾安全。我想我只是不明白 PDO 的安全性在哪里。这是我的一些代码示例,用于获取用户输入然后将其放入数据库中。这有什么问题吗?或者我可以做些什么改进?
<?php
session_start();
include("dbgear.php");
$var1 = $_POST['stuff1'];
$var2 = $_POST['stuff2'];
$var3 = $_POST['stuff3'];
$var4 = $_POST['stuff4'];
$var5 = $_SESSION['stuff5'];
$vardate = date("M d, Y h:i A");
$info = "INSERT INTO comments SET name=:user,class=:class,comment=:commentarea,date=:date,detector=:detector";
$send = $connect->prepare($info);
$send->execute(array(':user'=>$var1,':class'=>$var2,':commentarea'=>$var3,':date'=>$var4,':detector'=>$var5));
?>
【问题讨论】:
-
安全性(实际上是副产品)来自与数据值分开发送到服务器的 SQL 命令,不进行字符串插值。在真正的准备好的语句模式下,就是这样。在 PDO 仿真模式下,->execute 将简单地转义原始值。这就是为什么你不必费心。 (关于值。动态标识符或变体查询的不同之处...)
标签: php pdo sql-injection