Php url在wp\u safe\u remote\u get上无效
我使用WooCommerceV3API开发了一个应用程序 我想通过远程url推送图像 我的网址: 但我无法通过产品API更新将其上传到Woocommerce 我在代码中发现这个问题,图像是由wp\u safe\u remote\u从Wordpress下载的。但是这种方法我认为我的URL不安全 为什么不安全?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执行相同的主机检查 以下是消
我可以添加一些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] =>
)