检查xmlrpc请求的来源

时间:2016-07-02 作者:Eleco

我让webapp A(运行wordpress)与webapp B(运行Java,没有wordpress或php)对话。

B通过https向A发出xmlrpc请求。

为了保护A上的xmlrpc端点,我想验证调用方的身份,即确保A只接受B生成的xmlrpc请求。

在Java中,这可以通过抓取HttpServletRequest对象并检查远程主机来实现。不太确定如何使用php/wordpress实现这一点。感谢您的指点。。。

1 个回复
SO网友:Ismail

我想是的$_SERVER[\'HTTP_ORIGIN\'] 对这一点有帮助的属性,甚至HTTP_REFERER, 挂钩到init 钩子以确保在允许此原点之前不会运行任何内容,例如:

add_action("init", function() {
    global $pagenow;
    if ( "xmlrpc.php" !== $pagenow ) return; // xmlrpc.php only
    $domains = array( "example.com" ); // domains to allow
    if( !isset($_SERVER[\'HTTP_ORIGIN\']) || !in_array($_SERVER[\'HTTP_ORIGIN\'], $domains) ) {
        exit(\'No requests allowed from this origin.\');
    } return;
}, 0);
我迷上了init 并使用全局$pagenow 因为我没有在那个文件中找到任何其他最初需要监听的钩子。

希望这对你的练习有帮助。