【问题标题】:Security in php, is my code safe?php中的安全性,我的代码安全吗?
【发布时间】:2013-07-05 10:16:57
【问题描述】:

我有 2 个关于 php 安全性的问题,

第一:
是否可以使用 sql 注入上传文件? (对 load_file 和 INTO FILE 的访问被拒绝)

第二:
在 PDO 中我需要使用PDO::quote 方法,这种方法注射安全吗?

这是一个例子:

$check = "SELECT * FROM table_name WHERE username = ". $database->quote($this->username);

【问题讨论】:

  • 如果您将 prepare 与 PDO 一起使用,那么您将不会遇到任何注入问题,因为查询是独立于 bindParams 运行的
  • 我知道,但我需要使用报价
  • 我不明白第一个问题。举个上传文件的例子,包含 SQL 注入。
  • @user4035 我的问题很简单,是否可以通过sql注入上传php shell文件?
  • @deceze - MySql 支持在服务器上加载和保存文件的功能(取决于配置)。这可用于在服务器上放置恶意代码,如果您找到执行它们的方法,您可以获得对服务器的访问权限。你可能会发现一个例子here

标签: php sql security pdo sql-injection


【解决方案1】:

是否可以通过sql注入上传文件?

这个网站是为开发者准备的,而不是我相信的欺诈者。作为开发人员,我根本不关心任何注入变体。即使这种特殊的注射是不可能的 - 范围广泛的其他注射也会让您面临同样的危险。

开发人员唯一应该知道的是如何正确格式化他的查询。其他的都是无用的垃圾。所以,如何格式化一个 SQL 查询,如何正确无条件地进行格式化,确实是开发者应该知道的。
但不管是哪种注射方式,他都不关他的事。

开发人员在注入方面唯一需要知道的是,格式不正确的查询文字可能会被利用。

在 PDO 中我需要使用引用方法

不,在 PDO 中,您需要使用准备好的语句。

这种方法注射安全吗?

虽然您提供的示例非常安全(对于传统编码),但非常方法很容易出错,并且可能让您很容易陷入注入。只要格式化工具是可转让的 - 它仍然有很高的风险被移出查询大楼并最终丢失或被不当使用。

准备好的语句的好处是它可以无条件地正确格式化。

【讨论】:

  • 安全来自于理解,仅仅遵循规则而不知道威胁是编写安全代码的不良动机。
  • 所有开发人员都应该知道如何正确格式化他们的查询。其他的都是无用的垃圾。因此,如何格式化 SQL 查询以及如何正确无条件地进行 SQL 查询确实是开发人员应该知道和理解的——我不是在争论这一点。但无论何种注射类型都与他无关。
【解决方案2】:

是否可以通过sql注入上传文件? (对 load_file 和 INTO FILE 的访问被拒绝)

如果所有的 MySQL 文件 i/o 功能都被禁用,那么一般来说,不可能仅通过 SQL 注入漏洞上传文件。如果其他地方有一些其他代码与 SQLi 结合最终允许攻击者“上传文件”,则仍有可能。

在PDO中我需要使用quote方法,这种方法注入安全吗?

只要正确配置了字符集,PDO::quote 就被认为是安全的。正如其他人指出的那样,Prepared Statement 是首选。

【讨论】:

    【解决方案3】:

    首先: 是否可以使用 sql 注入上传文件? (对 load_file 和 INTO FILE 的访问被拒绝)

    是的,始终可以上传此类文件,但在将它们以任何格式放入 db 之前检查并转义存储的文件,这取决于您。

    第二: 在 PDO 中我需要使用引用方法,这种方法可以安全注入吗?

    在 PDO 中避免 SQL 注入的最佳方法是使用准备好的语句

    Check this topic which covers topic really well

    当您将参数绑定到查询时,您可以指定它的类型,例如 PDO::PARAM_STRPDO::PARAM_INT。这将进行适当的转义,并且您将更安全地抵御 SQL INJECTION

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-29
      • 2011-08-06
      • 2011-07-11
      • 2015-11-03
      • 1970-01-01
      • 2014-09-27
      相关资源
      最近更新 更多