__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
<?php
declare(strict_types=1);
namespace PhpMyAdmin;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Utils\HttpRequest;
use function count;
use function http_build_query;
use function is_array;
use function json_encode;
use function mb_strlen;
use function mb_substr;
use function parse_str;
use function parse_url;
use function preg_match;
use function str_replace;
use const E_USER_WARNING;
use const PHP_VERSION;
/**
* Error reporting functions used to generate and submit error reports
*/
class ErrorReport
{
/**
* The URL where to submit reports to
*
* @var string
*/
private $submissionUrl = 'https://reports.phpmyadmin.net/incidents/create';
/** @var HttpRequest */
private $httpRequest;
/** @var Relation */
private $relation;
/** @var Template */
public $template;
/** @var Config */
private $config;
/**
* @param HttpRequest $httpRequest HttpRequest instance
* @param Relation $relation Relation instance
* @param Template $template Template instance
*/
public function __construct(HttpRequest $httpRequest, Relation $relation, Template $template, Config $config)
{
$this->httpRequest = $httpRequest;
$this->relation = $relation;
$this->template = $template;
$this->config = $config;
}
/**
* Set the URL where to submit reports to
*
* @param string $submissionUrl Submission URL
*/
public function setSubmissionUrl(string $submissionUrl): void
{
$this->submissionUrl = $submissionUrl;
}
/**
* Returns the error report data collected from the current configuration or
* from the request parameters sent by the error reporting js code.
*
* @param string $exceptionType whether exception is 'js' or 'php'
*
* @return array error report if success, Empty Array otherwise
*/
public function getData(string $exceptionType = 'js'): array
{
$relationParameters = $this->relation->getRelationParameters();
// common params for both, php & js exceptions
$report = [
'pma_version' => Version::VERSION,
'browser_name' => $this->config->get('PMA_USR_BROWSER_AGENT'),
'browser_version' => $this->config->get('PMA_USR_BROWSER_VER'),
'user_os' => $this->config->get('PMA_USR_OS'),
'server_software' => $_SERVER['SERVER_SOFTWARE'] ?? null,
'user_agent_string' => $_SERVER['HTTP_USER_AGENT'],
'locale' => $this->config->getCookie('pma_lang'),
'configuration_storage' => $relationParameters->db === null ? 'disabled' : 'enabled',
'php_version' => PHP_VERSION,
];
if ($exceptionType === 'js') {
if (empty($_POST['exception'])) {
return [];
}
$exception = $_POST['exception'];
if (isset($exception['stack'])) {
$exception['stack'] = $this->translateStacktrace($exception['stack']);
}
if (isset($exception['url'])) {
[$uri, $scriptName] = $this->sanitizeUrl($exception['url']);
$exception['uri'] = $uri;
$report['script_name'] = $scriptName;
unset($exception['url']);
} elseif (isset($_POST['url'])) {
[$uri, $scriptName] = $this->sanitizeUrl($_POST['url']);
$exception['uri'] = $uri;
$report['script_name'] = $scriptName;
unset($_POST['url']);
} else {
$report['script_name'] = null;
}
$report['exception_type'] = 'js';
$report['exception'] = $exception;
if (! empty($_POST['description'])) {
$report['steps'] = $_POST['description'];
}
} elseif ($exceptionType === 'php') {
$errors = [];
// create php error report
$i = 0;
if (! isset($_SESSION['prev_errors']) || $_SESSION['prev_errors'] == '') {
return [];
}
foreach ($_SESSION['prev_errors'] as $errorObj) {
/** @var Error $errorObj */
if (! $errorObj->getLine() || ! $errorObj->getType() || $errorObj->getNumber() == E_USER_WARNING) {
continue;
}
$errors[$i++] = [
'lineNum' => $errorObj->getLine(),
'file' => $errorObj->getFile(),
'type' => $errorObj->getType(),
'msg' => $errorObj->getOnlyMessage(),
'stackTrace' => $errorObj->getBacktrace(5),
'stackhash' => $errorObj->getHash(),
];
}
// if there were no 'actual' errors to be submitted.
if ($i == 0) {
return []; // then return empty array
}
$report['exception_type'] = 'php';
$report['errors'] = $errors;
} else {
return [];
}
return $report;
}
/**
* Sanitize a url to remove the identifiable host name and extract the
* current script name from the url fragment
*
* It returns two things in an array. The first is the uri without the
* hostname and identifying query params. The second is the name of the
* php script in the url
*
* @param string $url the url to sanitize
*
* @return array the uri and script name
*/
private function sanitizeUrl(string $url): array
{
$components = parse_url($url);
if (! is_array($components)) {
$components = [];
}
if (isset($components['fragment']) && preg_match('<PMAURL-\d+:>', $components['fragment'], $matches)) {
$uri = str_replace($matches[0], '', $components['fragment']);
$url = 'https://example.com/' . $uri;
$components = parse_url($url);
if (! is_array($components)) {
$components = [];
}
}
// get script name
preg_match('<([a-zA-Z\-_\d\.]*\.php|js\/[a-zA-Z\-_\d\/\.]*\.js)$>', $components['path'] ?? '', $matches);
if (count($matches) < 2) {
$scriptName = 'index.php';
} else {
$scriptName = $matches[1];
}
// remove deployment specific details to make uri more generic
if (isset($components['query'])) {
parse_str($components['query'], $queryArray);
unset($queryArray['db'], $queryArray['table'], $queryArray['token'], $queryArray['server']);
unset($queryArray['eq']);
$query = http_build_query($queryArray);
} else {
$query = '';
}
$uri = $scriptName . '?' . $query;
return [
$uri,
$scriptName,
];
}
/**
* Sends report data to the error reporting server
*
* @param array $report the report info to be sent
*
* @return string|bool|null the reply of the server
*/
public function send(array $report)
{
return $this->httpRequest->create(
$this->submissionUrl,
'POST',
false,
json_encode($report),
'Content-Type: application/json'
);
}
/**
* Translates the cumulative line numbers in the stack trace as well as sanitize
* urls and trim long lines in the context
*
* @param array $stack the stack trace
*
* @return array the modified stack trace
*/
private function translateStacktrace(array $stack): array
{
foreach ($stack as &$level) {
foreach ($level['context'] as &$line) {
if (mb_strlen($line) <= 80) {
continue;
}
$line = mb_substr($line, 0, 75) . '//...';
}
[$uri, $scriptName] = $this->sanitizeUrl($level['url']);
$level['uri'] = $uri;
$level['scriptname'] = $scriptName;
unset($level['url']);
}
unset($level);
return $stack;
}
/**
* Generates the error report form to collect user description and preview the
* report before being sent
*
* @return string the form
*/
public function getForm(): string
{
$reportData = $this->getData();
$datas = [
'report_data' => $reportData,
'hidden_inputs' => Url::getHiddenInputs(),
'hidden_fields' => null,
'allowed_to_send_error_reports' => $this->config->get('SendErrorReports') !== 'never',
];
if (! empty($reportData)) {
$datas['hidden_fields'] = Url::getHiddenFields($reportData, '', true);
}
return $this->template->render('error/report_form', $datas);
}
public function getEmptyModal(): string
{
return $this->template->render('error/report_modal', [
'allowed_to_send_error_reports' => $this->config->get('SendErrorReports') !== 'never',
]);
}
}
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| Charsets | Folder | 0755 |
|
|
| Command | Folder | 0755 |
|
|
| Config | Folder | 0755 |
|
|
| ConfigStorage | Folder | 0755 |
|
|
| Controllers | Folder | 0755 |
|
|
| Crypto | Folder | 0755 |
|
|
| Database | Folder | 0755 |
|
|
| Dbal | Folder | 0755 |
|
|
| Display | Folder | 0755 |
|
|
| Engines | Folder | 0755 |
|
|
| Exceptions | Folder | 0755 |
|
|
| Export | Folder | 0755 |
|
|
| Gis | Folder | 0755 |
|
|
| Html | Folder | 0755 |
|
|
| Http | Folder | 0755 |
|
|
| Image | Folder | 0755 |
|
|
| Import | Folder | 0755 |
|
|
| Navigation | Folder | 0755 |
|
|
| Partitioning | Folder | 0755 |
|
|
| Plugins | Folder | 0755 |
|
|
| Properties | Folder | 0755 |
|
|
| Providers | Folder | 0755 |
|
|
| Query | Folder | 0755 |
|
|
| Server | Folder | 0755 |
|
|
| Setup | Folder | 0755 |
|
|
| Table | Folder | 0755 |
|
|
| Twig | Folder | 0755 |
|
|
| Utils | Folder | 0755 |
|
|
| WebAuthn | Folder | 0755 |
|
|
| Advisor.php | File | 12.32 KB | 0644 |
|
| Bookmark.php | File | 9.19 KB | 0644 |
|
| BrowseForeigners.php | File | 10.63 KB | 0644 |
|
| Cache.php | File | 1.5 KB | 0644 |
|
| Charsets.php | File | 6.82 KB | 0644 |
|
| CheckUserPrivileges.php | File | 11.3 KB | 0644 |
|
| Common.php | File | 19.4 KB | 0644 |
|
| Config.php | File | 41.65 KB | 0644 |
|
| Console.php | File | 3.25 KB | 0644 |
|
| Core.php | File | 28.91 KB | 0644 |
|
| CreateAddField.php | File | 15.83 KB | 0644 |
|
| DatabaseInterface.php | File | 71.73 KB | 0644 |
|
| DbTableExists.php | File | 2.86 KB | 0644 |
|
| Encoding.php | File | 8.41 KB | 0644 |
|
| Error.php | File | 13.63 KB | 0644 |
|
| ErrorHandler.php | File | 18.31 KB | 0644 |
|
| ErrorReport.php | File | 8.99 KB | 0644 |
|
| Export.php | File | 45.7 KB | 0644 |
|
| FieldMetadata.php | File | 11.11 KB | 0644 |
|
| File.php | File | 19.75 KB | 0644 |
|
| FileListing.php | File | 2.88 KB | 0644 |
|
| FlashMessages.php | File | 1.22 KB | 0644 |
|
| Font.php | File | 5.58 KB | 0644 |
|
| Footer.php | File | 8.06 KB | 0644 |
|
| Git.php | File | 18 KB | 0644 |
|
| Header.php | File | 20 KB | 0644 |
|
| Import.php | File | 48.72 KB | 0644 |
|
| Index.php | File | 14.83 KB | 0644 |
|
| IndexColumn.php | File | 4.75 KB | 0644 |
|
| InsertEdit.php | File | 89.05 KB | 0644 |
|
| InternalRelations.php | File | 17.31 KB | 0644 |
|
| IpAllowDeny.php | File | 9.13 KB | 0644 |
|
| Language.php | File | 4.47 KB | 0644 |
|
| LanguageManager.php | File | 22.74 KB | 0644 |
|
| Linter.php | File | 4.99 KB | 0644 |
|
| ListAbstract.php | File | 1.67 KB | 0644 |
|
| ListDatabase.php | File | 4.11 KB | 0644 |
|
| Logging.php | File | 2.69 KB | 0644 |
|
| Menu.php | File | 20.4 KB | 0644 |
|
| Message.php | File | 18.68 KB | 0644 |
|
| Mime.php | File | 927 B | 0644 |
|
| Normalization.php | File | 41.53 KB | 0644 |
|
| OpenDocument.php | File | 8.62 KB | 0644 |
|
| Operations.php | File | 35.11 KB | 0644 |
|
| OutputBuffering.php | File | 4.1 KB | 0644 |
|
| ParseAnalyze.php | File | 2.34 KB | 0644 |
|
| Pdf.php | File | 4.17 KB | 0644 |
|
| Plugins.php | File | 21.83 KB | 0644 |
|
| Profiling.php | File | 2.16 KB | 0644 |
|
| RecentFavoriteTable.php | File | 11.44 KB | 0644 |
|
| Replication.php | File | 4.81 KB | 0644 |
|
| ReplicationGui.php | File | 21.24 KB | 0644 |
|
| ReplicationInfo.php | File | 4.79 KB | 0644 |
|
| ResponseRenderer.php | File | 13.5 KB | 0644 |
|
| Routing.php | File | 6.55 KB | 0644 |
|
| Sanitize.php | File | 11.98 KB | 0644 |
|
| SavedSearches.php | File | 11.33 KB | 0644 |
|
| Scripts.php | File | 3.74 KB | 0644 |
|
| Session.php | File | 8.16 KB | 0644 |
|
| Sql.php | File | 64.01 KB | 0644 |
|
| SqlQueryForm.php | File | 6.74 KB | 0644 |
|
| StorageEngine.php | File | 15.71 KB | 0644 |
|
| SystemDatabase.php | File | 3.98 KB | 0644 |
|
| Table.php | File | 90.33 KB | 0644 |
|
| Template.php | File | 4.5 KB | 0644 |
|
| Theme.php | File | 7.32 KB | 0644 |
|
| ThemeManager.php | File | 7 KB | 0644 |
|
| Tracker.php | File | 30.34 KB | 0644 |
|
| Tracking.php | File | 36.11 KB | 0644 |
|
| Transformations.php | File | 16.31 KB | 0644 |
|
| TwoFactor.php | File | 7.5 KB | 0644 |
|
| Types.php | File | 25.85 KB | 0644 |
|
| Url.php | File | 10.61 KB | 0644 |
|
| UrlRedirector.php | File | 1.74 KB | 0644 |
|
| UserPassword.php | File | 6.86 KB | 0644 |
|
| UserPreferences.php | File | 10.49 KB | 0644 |
|
| Util.php | File | 86.45 KB | 0644 |
|
| Version.php | File | 556 B | 0644 |
|
| VersionInformation.php | File | 7.3 KB | 0644 |
|
| ZipExtension.php | File | 10.33 KB | 0644 |
|