Php url在wp\u safe\u remote\u get上无效

Php url在wp\u safe\u remote\u get上无效,php,wordpress,woocommerce,Php,Wordpress,Woocommerce,我使用WooCommerceV3API开发了一个应用程序 我想通过远程url推送图像 我的网址: 但我无法通过产品API更新将其上传到Woocommerce 我在代码中发现这个问题,图像是由wp\u safe\u remote\u从Wordpress下载的。但是这种方法我认为我的URL不安全 为什么不安全? 我可以添加一些whitlist系统以避免将此URL视为不安全的吗?Wordpress代码似乎对使用wp\u safe\u remote\u get()获取的URL执行相同的主机检查 以下是消

我使用WooCommerceV3API开发了一个应用程序

我想通过远程url推送图像

我的网址:

但我无法通过产品API更新将其上传到Woocommerce

我在代码中发现这个问题,图像是由wp\u safe\u remote\u从Wordpress下载的。但是这种方法我认为我的URL不安全

为什么不安全?
我可以添加一些whitlist系统以避免将此URL视为不安全的吗?

Wordpress代码似乎对使用
wp\u safe\u remote\u get()获取的URL执行相同的主机检查

以下是消息来源:

重要的部分是
wp\u http\u validate\u url
函数,特别是第524-530行,如下所示:

$parsed_home = @parse_url( get_option( 'home' ) );
if ( isset( $parsed_home['host'] ) ) { 
    $same_host = ( strtolower( $parsed_home['host'] ) === strtolower( $parsed_url['host'] ) || 'localhost' === strtolower( $parsed_url['host'] ) );
} else {
    $same_host = false;
}
如果
$same\u host
false
,则该方法将url视为不安全

我看不到白名单。如果要避免此问题,可能需要编辑代码以使用
wp\u remote\u get()


更新:前面的参数是错误的。只要端口正常,即使主机不相同,代码也会返回url。

如果url的主机包含以下符号之一,则url将被拒绝:
:#?[]

如果没有此图像可以检索,请尝试删除
?sha=989266d5133de145

.

我一直在尝试在live server上上传您的图像,我使用woocommerce v3 API方法,一切正常。也许你需要重新检查你的应用程序功能,你的服务器,防火墙,增加你的超时http等等,问题可能来自图像服务器

由于您的问题
wp\u safe\u remote\u get
,我们可以调整这些函数,只需测试
wp\u safe\u remote\u get
,即可通过url上传图像

这里是图像的响应头,由
wp\u safe\u remote\u get

Array
(
    [headers] => Array
        (
            [content-disposition] => filename="GI64000_front.png"
            [content-length] => 934080
            [content-type] => image/png
            [etag] => "6f19381f5b2ae0657f6e7945d7ca4bac05e3ad3a"
            [server] => nginx
            [expires] => Mon, 20 Mar 2017 19:20:54 GMT
            [last-modified] => Sun, 20 Mar 2016 19:20:54 GMT
            [connection] => close
            [date] => Wed, 23 Mar 2016 00:19:28 GMT
            [content-encoding] => gzip
        )

    [body] => �PNG
... I skip this part ...

[response] => Array
        (
            [code] => 200
            [message] => OK
        )

    [cookies] => Array
        (
        )

    [filename] => 
)

谢谢你给我指出了这个问题。但事实并非如此。当同一个_host==false时,在IP和主机之间进行检查:并检查IP是否是本地的:在我的情况下,IP是本地的,因为WP和主机位于AWS上的同一VPC上。所以DNS返回本地IPSorry-我错了。我已经通过
wp\u http\u validate\u url
运行了url,它返回的结果很好。所以失败的不是url验证。您会遇到什么错误?如果您有正确的函数名,您可以使用补丁或其他方法覆盖该函数,这远远不理想,但您可以将白名单实现添加到其中。
Array
(
    [headers] => Array
        (
            [content-disposition] => filename="GI64000_front.png"
            [content-length] => 934080
            [content-type] => image/png
            [etag] => "6f19381f5b2ae0657f6e7945d7ca4bac05e3ad3a"
            [server] => nginx
            [expires] => Mon, 20 Mar 2017 19:20:54 GMT
            [last-modified] => Sun, 20 Mar 2016 19:20:54 GMT
            [connection] => close
            [date] => Wed, 23 Mar 2016 00:19:28 GMT
            [content-encoding] => gzip
        )

    [body] => �PNG
... I skip this part ...

[response] => Array
        (
            [code] => 200
            [message] => OK
        )

    [cookies] => Array
        (
        )

    [filename] => 
)