Newer
Older
<?php
namespace App;
use URL;
abstract class Document
{
protected $password;
protected $baseUrl;
public function __construct($password, $base)
{
$this->password = $password;
$this->baseUrl = $base;
}
public function proxifyFormAction($url){
$url = trim($url);
if (stripos($url, "javascript:") === 0) {
return "";
}
// Deny Loading internal URLs and check if URL syntax is correct
$host = parse_url($url, PHP_URL_HOST);
$selfHost = \Request::getHttpHost();
if (strpos($url, "http") !== 0 || $host === false || $host === $selfHost) {
return $url;
}
return \App\Http\Controllers\ProxyController::generateFormgetUrl($url);
}
public function proxifyUrl($url, $topLevel)
{
// Only convert valid URLs
$url = trim($url);
if (stripos($url, "javascript:") === 0) {
return "";
}
// Deny Loading internal URLs and check if URL syntax is correct
$host = parse_url($url, PHP_URL_HOST);
$selfHost = \Request::getHttpHost();
if (strpos($url, "http") !== 0 || $host === false || $host === $selfHost) {
if($topLevel){
return \App\Http\Controllers\ProxyController::generateProxyWrapperUrl($url);
}else{
return \App\Http\Controllers\ProxyController::generateProxyUrl($url);
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
}
}
protected function convertRelativeToAbsoluteLink($rel)
{
if (strpos($rel, "//") === 0) {
$rel = parse_url($this->baseUrl, PHP_URL_SCHEME) . ":" . $rel;
}
/* return if already absolute URL or empty URL */
if (parse_url($rel, PHP_URL_SCHEME) != ''
|| strlen(trim($rel)) <= 0
|| preg_match("/^\s*mailto:/si", $rel)) {
return ($rel);
}
/* queries and anchors */
if ($rel[0] == '#' || $rel[0] == '?') {
return ($this->baseUrl . $rel);
}
/* parse base URL and convert to local variables:
$scheme, $host, $path */
extract(parse_url($this->baseUrl));
/* remove non-directory element from path */
if (isset($path)) {
$path = preg_replace('#/[^/]*$#', '', $path);
}
/* destroy path if relative url points to root */
if ($rel[0] == '/') {
$path = '';
}
/* dirty absolute URL */
$abs = '';
/* do we have a user in our URL? */
if (isset($user)) {
$abs .= $user;
/* password too? */
if (isset($pass)) {
$abs .= ':' . $pass;
}
$abs .= '@';
}
if (!isset($host)) {
#die(var_dump($this->baseUrl));
}
$abs .= $host;
/* did somebody sneak in a port? */
if (isset($port)) {
$abs .= ':' . $port;
}
if (isset($path)) {
$abs .= $path;
}
if (isset($rel)) {
$abs .= "/" . ltrim($rel, "/");
}
/* replace '//' or '/./' or '/foo/../' with '/' */
$re = array('#(/\.?/)#', '#/(?!\.\.)[^/]+/\.\./#');
for ($n = 1; $n > 0; $abs = preg_replace($re, '/', $abs, -1, $n)) {
}
/* absolute URL is ready! */
return ($scheme . '://' . $abs);
}
abstract public function proxifyContent();
}