清理自定义查询的子句

时间:2013-01-28 作者:Tomas Buteler

我正在尝试构建一个自定义查询,很像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是如何实现的)?还是我应该尝试一种不同的方法,即使这意味着牺牲灵活性?

1 个回复
SO网友:david.binda

我建议这样想:如果我不能清理整个查询(就像你不能清理一样,清理意味着什么?是删除还是删除恶意的或想要的查询?你的插件必须能够确定每个查询的预期目的,并且它是无法访问的。),你可以预测它的内容。

apply\\u filter函数可以接受4个参数,当第一个参数为“或”或“或”时(您不会包含参数stright,但您会在插件中定义的变量中检查它的值,并插入“yours”变量的值。第二个参数是字符串,不包含分号nor=,也不包含引号(您可以str\\u替换它们或在strpos的基础上拒绝),下一个参数将与第一个参数大致相同,但将检查=/!=/>/=/<;=最后一个将与第二个相同。

结束

相关推荐

如何在没有插件的情况下使导航成为<SELECT>列表?

Possible Duplicate:Show a WP 3.0 Custom Menu in an HTML Select with Auto-Navigation? 我为此尝试了几种解决方案,但都没有奏效<我设法将导航列表<select><option> 列表,但不包含页面名称,不显示其URL有什么想法吗?如果没有外部插件,我如何制作一个功能齐全的选择列表导航?(理想的解决方案是页面URL显示为value 在option 因此我可以使用JavaScript进行页面导航)