Rezepte
Sicherheitsrichtlinien für Inhalte
Wenn Ihre Website die Content Security Policy verwendet, müssen Sie Folgendes hinzufügen 'nonce-<value>'
und 'strict-dynamic'
zu script-src
hinzufügen, damit Tracy richtig funktioniert. Einige Plugins von
Drittanbietern können zusätzliche Direktiven erfordern. Nonce wird in der Direktive style-src
nicht unterstützt.
Wenn Sie diese Direktive verwenden, müssen Sie 'unsafe-inline'
hinzufügen, aber dies sollte im Produktionsmodus
vermieden werden.
Konfigurationsbeispiel für Nette Framework:
http:
csp:
script-src: [nonce, strict-dynamic]
Beispiel in reinem PHP:
$nonce = base64_encode(random_bytes(20));
header("Content-Security-Policy: script-src 'nonce-$nonce' 'strict-dynamic';");
Schnelleres Laden
Die grundlegende Integration ist einfach, aber wenn Sie langsame blockierende Skripte in der Webseite haben, können diese das
Laden des Tracy verlangsamen. Die Lösung ist, dass Sie <?php Tracy\Debugger::renderLoader() ?>
in Ihre Vorlage
vor den Skripten einzufügen:
<!DOCTYPE html>
<html>
<head>
<title>...<title>
<?php Tracy\Debugger::renderLoader() ?>
<link rel="stylesheet" href="assets/style.css">
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
</head>
Fehlersuche bei AJAX-Anfragen
Tracy erfasst automatisch AJAX-Anfragen, die mit jQuery oder der systemeigenen API fetch
gestellt werden. Diese
Anfragen werden als zusätzliche Zeilen in der Tracy-Leiste angezeigt, was ein einfaches und bequemes AJAX-Debugging
ermöglicht.
Wenn Sie nicht möchten, dass AJAX-Anfragen automatisch erfasst werden, können Sie diese Funktion durch Setzen der JavaScript-Variable deaktivieren:
window.TracyAutoRefresh = false;
Für die manuelle Überwachung bestimmter AJAX-Anfragen fügen Sie den HTTP-Header X-Tracy-Ajax
mit dem von
Tracy.getAjaxHeader()
zurückgegebenen Wert hinzu. Hier ist ein Beispiel für die Verwendung mit der Funktion
fetch
:
fetch(url, {
headers: {
'X-Requested-With': 'XMLHttpRequest',
'X-Tracy-Ajax': Tracy.getAjaxHeader(),
}
})
Dieser Ansatz ermöglicht ein selektives Debugging von AJAX-Anfragen.
Datenspeicherung
Tracy kann Tracy-Leisten und Bluescreens für AJAX-Anfragen und Weiterleitungen anzeigen. Tracy erstellt seine eigenen
Sitzungen, speichert Daten in seinen eigenen temporären Dateien und verwendet ein tracy-session
Cookie.
Tracy kann auch so konfiguriert werden, dass es eine native PHP-Sitzung verwendet, die gestartet wird, bevor Tracy eingeschaltet wird:
session_start();
Debugger::setSessionStorage(new Tracy\NativeSession);
Debugger::enable();
Falls das Starten einer Sitzung eine komplexere Initialisierung erfordert, können Sie Tracy sofort starten (so dass es mit
auftretenden Fehlern umgehen kann), dann den Sitzungshandler initialisieren und schließlich Tracy über die Funktion
dispatch()
mitteilen, dass die Sitzung zur Verwendung bereit ist:
Debugger::setSessionStorage(new Tracy\NativeSession);
Debugger::enable();
// gefolgt von der Sitzungsinitialisierung
// und starten Sie die Sitzung
session_start();
Debugger::dispatch();
Die Funktion setSessionStorage()
gibt es seit Version 2.9, davor hat Tracy immer die native PHP-Sitzung
verwendet.
Benutzerdefinierter Scrubber
Scrubber ist ein Filter, der verhindert, dass sensible Daten wie Passwörter oder Anmeldedaten aus Dumps durchsickern. Der
Filter wird für jedes Element des gedumpten Arrays oder Objekts aufgerufen und gibt true
zurück, wenn der Wert
sensibel ist. In diesem Fall wird *****
anstelle des Wertes ausgegeben.
// vermeidet das Dumping von Schlüsselwerten und Eigenschaften wie `Passwort`,
// Passwort_Wiederholung", "Passwort_Prüfung", "Datenbank-Passwort", usw.
$scrubber = function(string $key, $value, ?string $class): bool
{
return preg_match('#password#i', $key) && $value !== null;
};
// wir verwenden es für alle Dumps innerhalb von BlueScreen
Tracy\Debugger::getBlueScreen()->scrubber = $scrubber;
Benutzerdefinierter Logger
Wir können einen benutzerdefinierten Logger erstellen, der Fehler und nicht abgefangene Ausnahmen protokolliert und auch von
Tracy\Debugger::log()
aufgerufen werden kann. Logger implementiert die Schnittstelle Tracy\ILogger.
use Tracy\ILogger;
class SlackLogger implements ILogger
{
public function log($value, $priority = ILogger::INFO)
{
// sendet eine Anfrage an Slack
}
}
Und dann aktivieren wir ihn:
Tracy\Debugger::setLogger(new SlackLogger);
Wenn wir das vollständige Nette Framework verwenden, können wir es in der NEON-Konfigurationsdatei einstellen:
services:
tracy.logger: SlackLogger
Monolog-Integration
Das Tracy-Paket bietet einen PSR-3-Adapter, der die Integration von monolog/monolog ermöglicht.
$monolog = new Monolog\Logger('main-channel');
$monolog->pushHandler(new Monolog\Handler\StreamHandler($logFilePath, Monolog\Logger::DEBUG));
$tracyLogger = new Tracy\Bridges\Psr\PsrToTracyLoggerAdapter($monolog);
Debugger::setLogger($tracyLogger);
Debugger::enable();
Debugger::log('info'); // schreibt: [<TIMESTAMP>] main-channel.INFO: info [] []
Debugger::log('warning', Debugger::WARNING); // writes: [<TIMESTAMP>] main-channel.WARNING: warning [] []
nginx
Wenn Tracy unter nginx nicht funktioniert, ist es wahrscheinlich falsch konfiguriert. Wenn es etwas gibt wie
try_files $uri $uri/ /index.php;
ändern Sie es in
try_files $uri $uri/ /index.php$is_args$args;