我以前没有PDO的经验,所以我的问题可能听起来太简单了 在安全方面,我几次听说PDO比mysql / mysqli好,而且由于Codeigniter支持PDO驱动程序,我决定在我的新项目中进行更改。
但是我知道Codeingiter没有使用准备好的语句,并且(我认为)它错过了使用PDO的意义,这是正确的,是否不安全?
所以我的问题是:使用PDO驱动程序,codeigniter被认为是不安全的吗?
而且,这是否意味着我必须自己处理基本安全问题?
答案 0 :(得分:0)
所有查询调用均在简化的$this->db
函数中进行转义,例如delete()
和get_where()
。这增加了一些自动安全性。
如果写得太套管,您可以授予用户访问权限以编辑其他用户内容。所以没有完全安全的神奇解决方案。您越详细,您的代码就越正确。
如果您需要自定义查询,可以这样做:
$int_user_id = 1;
$this->db->query("
SELECT *
FROM users
WHERE id = ?
", array($int_user_id));
注意:要实施IN ()
和LIKE
,您需要相应地转义,而不是通过array()
和?
插入。
答案 1 :(得分:0)
1. Database Support
PDO优于MySQL的核心优势在于其数据库驱动程序支持。 PDO支持许多不同的驱动程序,如CUBRID,MS SQL Server,Firebird / Interbase,IBM,MySQL等。
2. Security
只要开发人员按照预期的方式使用它们,这两个库都提供SQL注入安全性。建议将预准备语句与绑定查询一起使用。
3. Speed
虽然PDO和MySQL都非常快,但MySQL在基准测试中的表现速度要快得多 - 非准备语句约为2.5%,准备语句约为6.5%。
答案 2 :(得分:-1)
据我所知(CodeIgniter newbie;))它使用ActiveRecords很好地处理安全问题。我不知道它是否正在使用PDO,但它非常易于使用,查询看起来非常干净,而且它具有查询缓存。