【问题标题】:PHP, ODBC, and SQL InjectionPHP、ODBC 和 SQL 注入
【发布时间】:2012-11-16 15:20:37
【问题描述】:

当使用 ODBC 连接到 MS SQL Server 时,如何防止 SQL 注入? odbc_prepare() 不起作用 (see my open question) 由于 unixODBC 的错误,并且 ODBC 也没有 _escape_quote 函数。

此外,PDO 有一个 6 年前的严重错误,如果结果在 any 列中返回 NULL,则整个结果集将返回 null(至少在通过 ODBC 连接到 MSSQL 时)。

那么我可以做些什么来防范 SQL 注入呢?

【问题讨论】:

  • odbc_prepare() 有什么问题?
  • @sheldonCooper 在链接的问题中有详细说明;它出错了。
  • 是的,我看到了。我已经为此提出了解决方案。
  • 我不想显得毫无帮助(或不切实际),但如果您当前的软件堆栈存在已知错误并且这些错误对您的方案至关重要,那么您至少应该评估其他选项。在 Windows 上使用 PHP 可以让您访问具有 PDO 支持的 native driver,尽管我知道在您的情况下可能无法进行这样的更改。
  • 这是针对无法更改的非常大客户的短期项目。我只是一个承包商,他们不会听我的。

标签: php sql sql-server odbc


【解决方案1】:

虽然这是一个老问题,odbc_prepare() 几乎已被弃用。

你应该做的是改用 PDO:

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// Use the MSSQL driver's native prepared statements.
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);

这应该可行。

【讨论】:

  • +1 用于将ATTR_EMULATE_PREPARES 设置为false。使用预准备语句时防止 SQL 注入的最简单方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-07
  • 2011-07-05
  • 2018-03-23
  • 2021-06-06
  • 2010-11-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多