PluginProbe
Assistant – Every Day Productivity Apps / 1.5.5.1
Assistant – Every Day Productivity Apps v1.5.5.1
1.5.5.1 1.5.5 trunk 0.1.0 0.2.0 0.2.1 0.2.2 0.3.0 0.3.1 0.4 0.4.1 0.4.2 0.5.0 0.5.1 0.6.0 0.7.0 0.7.0.2 0.7.0.3 0.7.0.4 0.7.0.5 0.7.0.6 0.7.0.7 0.7.0.8 0.7.0.9 0.7.1 All 72 releases
← All changes | backend/src/Hooks/ImageProxy.php +29 -3 0.6.0 → 1.5.5.1 View file →
@@ -17,16 +17,20 @@
17 17 );
18 18 }
19 19
20 20 public function render_image() {
21 - $url = urldecode( $_GET['fl_asst_image_proxy'] );
22 - $url = str_replace( '?url=', '', $url );
21 + if ( ! isset( $_GET['fl_asst_image_proxy'] ) && ! isset( $_GET['url'] ) ) {
22 + return;
23 + }
23 24
25 + $url = esc_url_raw( $_GET['url'] );
26 + $url = urldecode( $url );
27 +
24 28 if ( 0 !== strpos( $url, 'http' ) ) {
25 29 return;
26 30 }
27 31
28 - $response = wp_remote_get( $url );
32 + $response = wp_safe_remote_get( $url );
29 33
30 34 if ( is_wp_error( $response ) ) {
31 35 return;
32 36 }
@@ -33,8 +37,19 @@
33 37
34 38 $body = wp_remote_retrieve_body( $response );
35 39 $headers = wp_remote_retrieve_headers( $response );
36 40
41 + // validate image
42 + $filesystem = self::filesystem();
43 + $tmpfile = tempnam( '/tmp', 'assistant' );
44 + $filesystem->put_contents( $tmpfile, $body );
45 + $validimage = wp_get_image_mime( $tmpfile );
46 + $filesystem->delete( $tmpfile );
47 +
48 + if ( ! $validimage ) {
49 + return false;
50 + }
51 +
37 52 if ( ! isset( $headers['content-type'] ) ) {
38 53 return;
39 54 } elseif ( 0 !== strpos( $headers['content-type'], 'image/' ) ) {
40 55 return;
@@ -42,6 +57,17 @@
42 57
43 58 header( 'Content-type: ' . $headers['content-type'] );
44 59 echo $body;
45 60 die();
61 + }
62 +
63 + private function filesystem() {
64 + global $wp_filesystem;
65 +
66 + if ( is_null( $wp_filesystem ) ) {
67 + require_once ABSPATH . '/wp-admin/includes/file.php';
68 + WP_Filesystem();
69 + }
70 +
71 + return $wp_filesystem;
46 72 }
47 73 }