绕过受密码保护的帖子,不幸的是,你对缺少过滤器的看法是正确的,对核心进行黑客攻击是不可避免的。一个似乎有效的解决方案围绕sanitize_post_field() 函数,如果其$context 参数未设置为raw.
负责决定是否显示密码字段或内容的模板函数是http://core.trac.wordpress.org/browser/tags/3.2.1/wp-includes/post-template.php#L556
请注意,将post_password? 让我们开始吧。。。
查看如何通过get_post() 功能:http://core.trac.wordpress.org/browser/tags/3.2.1/wp-includes/post.php#L370
该函数不包含要挂接的筛选器或操作,但sanitize_post_field() 包含一些可以连接到的筛选器,以及post_password 完成该功能。
请参考功能http://core.trac.wordpress.org/browser/tags/3.2.1/wp-includes/post.php#L1676
然而,请注意,如果$context == \'raw\'; 函数返回,并且没有任何筛选器被触发。因此,需要进行一些核心黑客攻击,以使代码流到达这些过滤器。
// wp-includes/post.php, line 557
-- $post = get_post($post);
++ $post = get_post($post, null, \'display\');
将强制
$context 除了
raw. 这将允许按照以下思路进行操作:
function wpse31407_bypass_password( $value, $post_id, $context ) {
$allowed_ips = array( \'127.0.0.1\', \'255.255.255.255\', ... );
if (in_array( $_SERVER[\'REMOTE_ADDR\'], $allowed_ips )) return \'\';
else return $value;
}
add_filter( \'post_password\', \'wpse31407_bypass_password\', null, 3 );
这将有效地删除密码,因此测试
http://core.trac.wordpress.org/browser/tags/3.2.1/wp-includes/post-template.php#L556 if ( empty($post->post_password) ) 评估为
true 允许您绕过密码。用一个
display 上下文,因为它仅用于检索
post_password.
您还可以在核心中围绕post_password_required() 上面提到的功能,可能不是为了使事情过于复杂。由你决定。
你会被诱惑http://core.trac.wordpress.org/browser/tags/3.2.1/wp-includes/query.php#L2625 posts_results 过滤并进入并更改post_status 对于来自的每个帖子private 到public... 然而,正如您可能已经看到的get_post_status() 函数处理其从中获取的帖子的自己副本get_post()... ...它同样没有过滤器sanitize_post_field() 是的,这同样需要$context 除了raw. 所以再说一遍:
// wp-includes/post.php, line 563
-- $post = get_post($post);
++ $post = get_post($post, null, \'display\');
并挂接到过滤器中,通过执行以下操作诱使函数认为帖子已发布:
function wpse31407_bypass_private( $value, $post_id, $context ) {
$allowed_ips = array( \'127.0.0.1\', \'255.255.255.255\', ... );
if (in_array( $_SERVER[\'REMOTE_ADDR\'], $allowed_ips )) return \'publish\';
else return $value;
}
add_filter( \'post_status\', \'wpse31407_bypass_private\', null, 3 );
或者在
get_post_status() 作用
结论
一旦你了解了核心的哪些部分是阻止帖子的原因,你可以根据需要尝试修改它们,因此我希望我的长答案在一定程度上有所帮助,有人会提供更多的提示,也许会提供更好的解决方案。好问题,让我挖掘和思考。