我有 2 个关于 php 安全性的问题,
第一:
是否可以通过sql注入上传文件?(访问 load_file 和 INTO FILE 被拒绝)
第二:
在PDO中我需要使用PDO::quote
方法,这种方法注射安全吗?
这是一个例子:
$check = "SELECT * FROM table_name WHERE username = ". $database->quote($this->username);
我有 2 个关于 php 安全性的问题,
第一:
是否可以通过sql注入上传文件?(访问 load_file 和 INTO FILE 被拒绝)
第二:
在PDO中我需要使用PDO::quote
方法,这种方法注射安全吗?
这是一个例子:
$check = "SELECT * FROM table_name WHERE username = ". $database->quote($this->username);
是否可以使用 sql 注入上传文件?(访问 load_file 和 INTO FILE 被拒绝)
如果所有的 MySQL 文件 i/o 功能都被禁用,那么一般来说不,不可能仅通过 SQL 注入漏洞上传文件。如果在其他地方有一些其他代码与 SQLi 结合最终允许攻击者“上传文件”,则仍有可能。
在 PDO 中我需要使用引用方法,这种方法对注入安全吗?
只要字符集配置正确,那么PDO::quote
就被认为是安全的。正如其他人所指出的那样,Prepared Statement是首选。
是否可以使用 sql 注入上传文件?
这个网站是为开发者准备的,而不是我相信的欺诈者。作为开发人员,我根本不关心任何注入变体。即使这种特殊的注射是不可能的——各种各样的其他注射也会让你面临同样的危险。
开发人员唯一应该知道的是如何正确格式化他的查询。其他的都是无用的垃圾。所以,如何格式化一个SQL查询,如何正确无条件地进行格式化,确实是开发者应该知道的。
但无论哪种注射类型都不关他的事。
在 PDO 中我需要使用引用方法
不,在 PDO 中,您需要使用准备好的语句。
这种方法注射安全吗?
尽管您提供的示例非常安全(对于传统编码),但这种方法很容易出错,并且可能让您很容易陷入注入。只要格式化工具是可转让的——它仍然有很高的风险被移出查询大楼并最终丢失或被不当使用。
准备好的语句的好处是它可以无条件地正确格式化。
第一:是否可以通过sql注入上传文件?(访问 load_file 和 INTO FILE 被拒绝)
是的,总是可以上传这样的文件,但是如果您在将它们以任何格式放入 db 之前检查并转义存储的文件,则取决于您。
第二:在PDO中我需要使用quote方法,这种方法注入安全吗?
在 PDO 中避免 SQL 注入的最好方法是使用准备好的语句。
当您将参数绑定到查询时,您可以指定它的类型,例如PDO::PARAM_STR
or PDO::PARAM_INT
。这将进行适当的转义,并且您将更安全地抵御 SQL INJECTION