我听说(感谢SO)mysql_*系列函数容易受到SQL注入的影响,因此始终建议使用mysqli_*或PDO方法。
因此,我试图找出Codeigniter中使用的这些方法中的哪一种,因为我已经使用CI4个月了。但我无法把它拿出来。
谁能告诉我CI中使用了哪种或任何其他方法?
提前谢谢。
CodeIgniter 会根据您的config/database.php
文件使用您选择的任何方法。例如,如果选择 mysqli
作为驱动程序,它将使用 mysqli
系列函数。如果选择 mysql
,它将使用 mysql
族,依此类推。
有一个PDO驱动程序,但它在当前版本中并不是世界上最稳定的东西。
如果您在 CodeIgniter 中使用"活动记录"函数(实际上应该称为"查询生成器"函数,因为它们不遵循活动记录模式),那么您的所有数据都会使用适当的函数自动清理。例如,如果您说 $this->db->where('field', $value)
,并且您使用的是 mysqli
驱动程序,CodeIgniter 将自动调用mysqli_real_escape_string
您传递给它$value
输入,从而使查询安全。
我还应该注意,这种自动清理仅适用于活动记录帮助程序功能,如$this->db->get
等。如果您尝试使用 $this->db->query("SELECT * FROM table WHERE field = '" . $field . "'")
运行自己的查询,则需要注意保护自己,因为您绕过了 CodeIgniter 的安全机制。直接使用 query()
方法运行查询就像说"别担心,我知道我在做什么"。您需要专门要求 CodeIgniter 通过调用 $this->db->escape()
或其相关函数来为您清理某些值。如果您只是将变量连接到查询中,那么您将向SQL注入开放。