egg*_*yal 10
记者了解到,该wpdb班,原本叉的贾斯汀·文森特的ezSQL库,引入的方式早在2003年,只有几个月的 MySQL的准备后声明协议被释放,超过一年前的PHP有任何访问它的API支持:WordPress的因此它做了唯一的事情,并且需要将任何变量直接连接到动态SQL中.
那时候,ezSQL(以及WordPress)使用 PHP的mysql_escape_string()函数来逃避这些文字 - 因此对数据库连接的实际编码一无所知(这种威胁仅在几个月前才在PHP本身中得到解决).
这仍然是对SQL注入的WordPress的(唯一的)防御了近两年,于是它切换到使用(偶数较不安全)addslashes()为逃避-一种情况,则留在地方了四年多,直到mysql_real_escape_string()被最后 使用(虽然wpdb::prepare()已经推出了在临时)!
那么这是不是另一个 5年直到WordPress的甚至开始使用一个驱动程序能够原生报表的编制(即库MySQLi):这个现在只是在两年前,作为@naththedeveloper 已经指出,在讨论中票#21663提示使用本机预处理语句甚至可能不在待办事项列表中.
不幸的是,由于MySQLi的对象是一个受保护的成员中的wpdb对此有没有吸气(和内部分配的类实例化时),有没有办法,你可以使用与WordPress的数据库连接的本地预处理语句(至少不无修改/更换wpdb与你自己的班级).
有什么我能做的才能得到真实的东西吗?
当然,您可以打开自己的/单独的数据库连接,您可以根据自己的需要完全灵活地进行连接.
或者我的担忧没有根据?
与原生语句准备一样伟大(我同意它确实应该是任何新项目中针对SQL注入的默认防御策略),它也有其缺点.仔细转义一个变量以用作SQL文字(例如,由PDO准备的语句模拟完成;以及wpdb::prepare()这些日子试图提供的内容)应该能抵抗所有已知的攻击......