ajamm Posted August 9, 2016 Share Posted August 9, 2016 I've been working with some code from github.com/joshdick/miniProxy I'm finding some sites do not render well due to some issues parsing the url resources. We are whitelisting specific URLs as below. Appreciate any assistance. There are some other issues, $whitelistPatterns = array( "@^https?://([a-z0-9-]+\.)*twitter\.com\/lolliesnz@i", "@^https?://([a-z0-9-]+\.)*facebook\.com\/nzlollies@i", "@^https?://([a-z0-9-]+\.)*pinterest\.com\/lolliesnz@i", "@^https?://([a-z0-9-]+\.)*plus\.google\.com\/113774575142319547983@i", "@^https?://([a-z0-9-]+\.)*instagram\.com\/lolliesnz@i", "@^https?://([a-z0-9-]+\.)*youtube\.com\/channel\/UCGcj8deX1QLrxhxrQ5Ey6jg@i", // === Instagram === NOT WORKING === // Needs fixing - url when parsed is not correct - http://connect-sm.com/preview.php///instagramstatic-a.akamaihd.net/h1/scripts/webfont.js/c0456c81549b.js - contains /// "@^https?://([a-z0-9-]+\.)*instagramstatic\-a\.akamaihd\.net@i", I'm picking the issue is somewhere in this section... //Converts relative URLs to absolute ones, given a base URL. //Modified version of code found at http://nashruddin.com/PHP_Script_for_Converting_Relative_to_Absolute_URL function rel2abs($rel, $base) { if (empty($rel)) $rel = "."; if (parse_url($rel, PHP_URL_SCHEME) != "" || strpos($rel, "//") === 0) return $rel; //Return if already an absolute URL if ($rel[0] == "#" || $rel[0] == "?") return $base.$rel; //Queries and anchors extract(parse_url($base)); //Parse base URL and convert to local variables: $scheme, $host, $path $path = isset($path) ? preg_replace('#/[^/]*$#', "", $path) : "/"; //Remove non-directory element from path if ($rel[0] == '/') $path = ""; //Destroy path if relative url points to root $port = isset($port) && $port != 80 ? ":" . $port : ""; $auth = ""; if (isset($user)) { $auth = $user; if (isset($pass)) { $auth .= ":" . $pass; } $auth .= "@"; } $abs = "$auth$host$port$path/$rel"; //Dirty absolute URL for ($n = 1; $n > 0; $abs = preg_replace(array("#(/\.?/)#", "#/(?!\.\.)[^/]+/\.\./#"), "/", $abs, -1, $n)) {} //Replace '//' or '/./' or '/foo/../' with '/' return $scheme . "://" . $abs; //Absolute URL is ready. } //Proxify contents of url() references in blocks of CSS text. function proxifyCSS($css, $baseURL) { return preg_replace_callback( '/url\((.*?)\)/i', function($matches) use ($baseURL) { $url = $matches[1]; //Remove any surrounding single or double quotes from the URL so it can be passed to rel2abs - the quotes are optional in CSS //Assume that if there is a leading quote then there should be a trailing quote, so just use trim() to remove them if (strpos($url, "'") === 0) { $url = trim($url, "'"); } if (strpos($url, "\"") === 0) { $url = trim($url, "\""); } if (stripos($url, "data:") === 0) return "url(" . $url . ")"; //The URL isn't an HTTP URL but is actual binary data. Don't proxify it. return "url(" . PROXY_PREFIX . rel2abs($url, $baseURL) . ")"; }, $css); } //Extract and sanitize the requested URL. $url = substr($_SERVER["REQUEST_URI"], strlen($_SERVER["SCRIPT_NAME"]) + 1); if (empty($url)) { $url = "http://socialconnect.co.nz"; // die("<html><head><title>miniProxy</title></head><body><h1>Welcome to miniProxy!</h1>miniProxy can be directly invoked like this: <a href=\"" . PROXY_PREFIX . "http://example.net/\">" . PROXY_PREFIX . "http://example.net/</a><br /><br />Or, you can simply enter a URL below:<br /><br /><form onsubmit=\"window.location.href='" . PROXY_PREFIX . "' + document.getElementById('site').value; return false;\"><input id=\"site\" type=\"text\" size=\"50\" /><input type=\"submit\" value=\"Proxy It!\" /></form></body></html>"); } else if (strpos($url, ":/") !== strpos($url, "://")) { //Work around the fact that some web servers (e.g. IIS 8.5) change double slashes appearing in the URL to a single slash. //See https://github.com/joshdick/miniProxy/pull/14 $pos = strpos($url, ":/"); $url = substr_replace($url, "://", $pos, strlen(":/")); } $scheme = parse_url($url, PHP_URL_SCHEME); if (empty($scheme)) { //Assume that any supplied URLs starting with // are HTTP URLs. if (strpos($url, "//") === 0) { $url = "http:" . $url; } } else if (!preg_match("/^https?$/i", $scheme)) { die('Error: Detected a "' . $scheme . '" URL. miniProxy exclusively supports http[s] URLs.'); } //Validate the requested URL against the whitelist. $urlIsValid = count($whitelistPatterns) === 0; foreach ($whitelistPatterns as $pattern) { if (preg_match($pattern, $url)) { $urlIsValid = true; break; } } One other issue... // ==== /scs/socialstatic is called without the domain in the page as just " /_/scs/social-static " and fails to load the resource "@^https?://([a-z0-9-]+\.)*plus.google.com\/\_\/scs\/social\-static@i", Quote Link to comment https://forums.phpfreaks.com/topic/301793-php-proxy-modifications/ Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.