From c739d7b1b3641cd9cfde390a5783efd413ec2db2 Mon Sep 17 00:00:00 2001 From: Julian Prieber <60265788+JulianPrieber@users.noreply.github.com> Date: Thu, 16 Jun 2022 09:56:36 +0200 Subject: [PATCH] Fixed cURL error 7 on proxied server --- resources/views/layouts/sidebar.blade.php | 28 +++++++++++++++++------ resources/views/panel/diagnose.blade.php | 26 ++++++++++++++++----- 2 files changed, 41 insertions(+), 13 deletions(-) diff --git a/resources/views/layouts/sidebar.blade.php b/resources/views/layouts/sidebar.blade.php index 9578f35..94b1c81 100755 --- a/resources/views/layouts/sidebar.blade.php +++ b/resources/views/layouts/sidebar.blade.php @@ -74,12 +74,26 @@ function has_sslsb( $domain ) { $actual_linksb = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; } +function getUrlSatusCodesb($urlsb, $timeoutsb = 3) + { + $chsb = curl_init(); + $optssb = array(CURLOPT_RETURNTRANSFER => true, // do not output to browser + CURLOPT_URL => $urlsb, + CURLOPT_NOBODY => true, // do a HEAD request only + CURLOPT_TIMEOUT => $timeoutsb); + curl_setopt_array($chsb, $optssb); + curl_exec($chsb); + $status = curl_getinfo($chsb, CURLINFO_HTTP_CODE); + curl_close($chsb); + return $status; + } + // Files or directories to test if accessible externally -$url1sb = Http::get($actual_linksb . '/../../.env'); -$url2sb = Http::get($actual_linksb . '/../../database/database.sqlite'); +$url1sb = getUrlSatusCodesb($actual_linksb . '/../../.env'); +$url2sb = getUrlSatusCodesb($actual_linksb . '/../../database/database.sqlite'); // sets compromised to true if config files got compromised -if ($url1sb->successful() or $url2sb->successful()) { +if($url1sb == '200' or $url2sb == '200') { $compromised = "true"; } else { $compromised = "false"; @@ -223,9 +237,9 @@ if ($url1sb->successful() or $url2sb->successful()) { @elseif(env('NOTIFY_UPDATES') == 'true' or env('NOTIFY_UPDATES') === 'major' or env('NOTIFY_UPDATES') === 'all') <?php // Checks if URL exists try { - function URL_exists(string $url): bool + function URL_exists(string $urlsb): bool { - return str_contains(get_headers($url)[0], "200 OK"); + return str_contains(get_headers($urlsb)[0], "200 OK"); } // Sets $ServerExists to true if URL exists if (URL_exists("https://julianprieber.github.io/littlelink-custom/version.json")){ @@ -283,9 +297,9 @@ if ($url1sb->successful() or $url2sb->successful()) { <! –– #### begin event detection #### ––> <?php try { - function URL_event_exists(string $url): bool + function URL_event_exists(string $urlsb): bool { - return str_contains(get_headers($url)[0], "200 OK"); + return str_contains(get_headers($urlsb)[0], "200 OK"); } if (URL_event_exists("https://julianprieber.github.io/littlelink-custom-events/event.json")){ $EventServerExists = "true"; diff --git a/resources/views/panel/diagnose.blade.php b/resources/views/panel/diagnose.blade.php index 06af2e2..b1a5fb3 100644 --- a/resources/views/panel/diagnose.blade.php +++ b/resources/views/panel/diagnose.blade.php @@ -10,6 +10,8 @@ $wfalse = "<td style=\"text-align: center; cursor: help;\" title=\"This file can $utrue = "<td style=\"text-align: center; cursor: help;\" title=\"Your security is at risk. This file can be accessed by everyone. Immediate action is required!\">❗</td>"; $ufalse = "<td style=\"text-align: center; cursor: help;\" title=\"Everything is working as expected!\">✔️</td>"; +$unull = "<td style=\"text-align: center; cursor: help;\" title=\"Something went wrong. This might be normal if you're running behind a proxy or docker container.\">➖</td>"; + $server = $_SERVER['SERVER_NAME']; $uri = $_SERVER['REQUEST_URI']; @@ -29,21 +31,33 @@ if (has_ssl($server)) { $actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; } +function getUrlSatusCode($url, $timeout = 3) + { + $ch = curl_init(); + $opts = array(CURLOPT_RETURNTRANSFER => true, // do not output to browser + CURLOPT_URL => $url, + CURLOPT_NOBODY => true, // do a HEAD request only + CURLOPT_TIMEOUT => $timeout); + curl_setopt_array($ch, $opts); + curl_exec($ch); + $status = curl_getinfo($ch, CURLINFO_HTTP_CODE); + curl_close($ch); + return $status; + } //Files or directories to test if writable $wrt1 = is_writable('.env'); $wrt2 = is_writable('database/database.sqlite'); //Files or directories to test if accessible externally -$url1 = Http::get($actual_link . '/../../.env'); -$url2 = Http::get($actual_link . '/../../database/database.sqlite'); - +$url1 = getUrlSatusCode($actual_link . '/../../.env'); +$url2 = getUrlSatusCode($actual_link . '/../../database/database.sqlite'); ?> <h2 class="mb-4"><i class="bi bi-braces-asterisk"> Debugging information</i></h2> - @if($url1->successful() or $url2->successful()) + @if($url1 == '200' or $url2 == '200') <a href="https://docs.littlelink-custom.com/d/installation-requirements/" target="_blank"><h4 style="color:tomato;">Your security is at risk. Some files can be accessed by everyone. Immediate action is required! <br> Click this message to learn more.</h4></a> @endif @@ -83,11 +97,11 @@ $url2 = Http::get($actual_link . '/../../database/database.sqlite'); <tbody> <tr> <td title="">{{ url('/.env') }}</td> - <?php if ($url1->successful()) {echo "$utrue";} else {echo "$ufalse";} ?> + <?php if($url1 == '200'){echo "$utrue";} elseif($url1 == '0'){echo "$unull";} else{echo "$ufalse";} ?> </tr> <tr> <td title="">{{ url('/database/database.sqlite') }}</td> - <?php if ($url2->successful()) {echo "$utrue";} else {echo "$ufalse";} ?> + <?php if($url2 == '200'){echo "$utrue";} elseif($url2 == '0'){echo "$unull";} else{echo "$ufalse";} ?> </tr> </tbody> </table>