【问题标题】:PDO security concern [duplicate]PDO 安全问题 [重复]
【发布时间】:2012-11-01 10:39:56
【问题描述】:

可能重复:
how safe are PDO prepared statements

所以我正在寻找 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


【解决方案1】:

您不必担心您在数据库中放入的内容。一切(安全方面)都由 PDO 处理。

但请记住,如果您稍后在您的网站上使用这些数据,它可能包含 javascript(XSS 注入)。因此,在您将用户数据输入数据库之前,请始终过滤您的用户数据、将整数转换为 int、过滤用户上传的 html 等,以获得最安全的方法。

【讨论】:

    猜你喜欢
    • 2016-05-23
    • 2011-09-26
    • 2012-11-04
    • 2023-03-04
    • 2018-01-03
    • 2017-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多