我正在尝试构建一个自定义查询,很像WordPress“native”中的查询get_posts()
在…内wp-includes/query.php
, 意思大致如下:
global $wpdb
SELECT *
FROM $wpdb->my_custom_table custom
WHERE 1=1
$conditions
$orderby
我希望能够
apply_filters
到变量
$conditions
和
$orderby
, 同样很像WP自己的功能,因此插件可能会添加自己的功能
AND custom.column = \'foo\'
并通过过滤器实现。但这种方法似乎存在一个明显的漏洞:如果来自插件的过滤器在该查询中插入恶意代码怎么办?
我知道$wpdb->prepare
函数,但据我所知,它只清理传递给查询的参数,而不清理子句本身。这很有意义,因为查询应该从prepare
是通过用户输入动态传递参数的参数。
无论如何,我的疑问是:我的担心是不是微不足道,也就是说,当总是有插件可以在运行时直接访问代码和数据库时,我不能百分之百地安全?甚至有恶意插件这样的东西吗(嗯,我肯定有,但我应该记住它们吗)?但如果我真的应该担心的话,有没有办法清理整个查询而不仅仅是参数,这样我就可以实现我想要的(即WordPress是如何实现的)?还是我应该尝试一种不同的方法,即使这意味着牺牲灵活性?