【问题标题】:I have a sample code, I need to know if it's PDO secure (MySQL) [duplicate]我有一个示例代码,我需要知道它是否是 PDO 安全的(MySQL)[重复]
【发布时间】:2017-02-04 20:11:38
【问题描述】:
$s = "Update member_date" [snip]
$p = $pdo->prepare($s, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$p->execute();

这是否被认为是一个“准备好的”语句来证明可以免受 SQL 注入类型的攻击?

更新:

$member_id= htmlspecialchars($_GET['member_id']);
s1 = "
update member_date
set member_date= now()
where member_id= $member_id";

总体问题:“这是我应该如何格式化所有与 SQL 相关的新代码的格式吗?在阅读了我的(新)错误日志后,我终于从旧的 mysql 语句进行切换。我需要添加问题吗?为字符串等标记占位符,或者出于安全目的,我在第一行代码中的格式是否可以?我知道完成任务所需的 SQL,而不是 PDO 安全部分。”

【问题讨论】:

  • 您应该分享实际的update 声明。这个概念看起来是对的,但魔鬼在细节中。
  • 魔鬼在 [snip] :-)
  • 我已经完成了。谢谢
  • 是的,我知道。我已经读过很多遍了。它没有解释它是如何或为什么减少了我需要理解的部分。
  • 因为注入绑定参数的SQL代码无法执行。

标签: mysql pdo prepared-statement


【解决方案1】:

没有。您没有按预期使用准备好的语句。您应该做的是将您的$id 添加为参数,从而将您的内容(id)与您的代码(sql)分开。

虽然您可以通过过滤自己来执行安全 SQL,但绝对最好的方法是,正如您所说:

为字符串等添加问号占位符

您可以说“这必须是 int,然后它就永远不会像 " 或某些对您的查询产生魔力的代码那样可怕。

【讨论】:

    【解决方案2】:

    PDO 是避免可能攻击服务器的 sql 注入的最佳方法。代码看起来不错。但是PHP PDO是避免sql注入的绝对正确方法。

    【讨论】:

    • 只是PDO语句本身避免了SQL注入?
    • @BluTiger - 不!
    • 我只是想知道,因为他说“但是 PHP PDO 是避免 sql 注入的绝对正确方法。”
    • @BluTiger PDO 提供“工具”来防止 SQL 注入。但是您需要使用这些工具。而且你需要正确使用它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    • 1970-01-01
    • 2013-09-15
    相关资源
    最近更新 更多