php中的安全性,我的代码安全吗?

时间:2013-07-05 10:16:57

标签: php sql security pdo sql-injection

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

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

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

以下是一个例子:

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

3 个答案:

答案 0 :(得分:0)

  

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

是的,始终可以上传此类文件,但如果您在以任何格式将文件放入数据库之前检查并转义存储的文件,则由您决定。

  

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

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

Check this topic which covers topic really well

将param绑定到查询时,您可以指定其类型,例如PDO::PARAM_STRPDO::PARAM_INT。这将进行适当的转义,您将更安全地对抗SQL INJECTION

答案 1 :(得分:0)

  

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

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

  

在PDO中我需要使用quote方法,这种方法对于注射是否安全?

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

答案 2 :(得分:0)

  

是否可以使用sql注入上传文件?

这个网站是供开发者使用的,而不是我认为的欺诈者。作为开发人员,我根本不关心任何注射变体。即使不能进行这种特殊的注射 - 各种其他注射也可以使您处于危险之中。

开发人员应该知道的唯一事情是如何正确格式化他的查询。其他一切都是无用的垃圾。因此,它是如何格式化SQL查询以及如何正确无条件地使其成为开发人员应该知道的。 但无论注射类型如何都不是他的事。

开发人员必须知道注入的唯一事情是可以利用格式不正确的查询文字。

  PDO中的

我需要使用引用方法

不,在PDO中你需要使用预备语句。

  

这种方法对注射是否安全?

虽然您提供的示例非常安全(对于传统编码),但方法容易出错,并且可能让您轻松进入注入状态。只要格式化设施是可以疏远的 - 它仍然存在从查询建筑物移开并最终丢失或不正确使用的高风险。

准备好的声明的好处在于它无条件地正确格式化。