This commit is contained in:
Esteban
2026-07-02 15:13:54 +02:00
parent a019dcb00d
commit 07bae3eff3
38 changed files with 2039 additions and 226 deletions
+49 -4
View File
@@ -1,21 +1,36 @@
<?php
// On cache les webhooks discord => Correction de faille de sécurité
require_once('../../idDiscord.php');
// __DIR__ = chemin absolu du dossier functions : le require fonctionne ainsi quel que soit
// le dossier depuis lequel le script est appelé (pages/, scripts/, racine...)
require_once(__DIR__ . '/../../idDiscord.php');
// EXEMPLE de a quoi ressemble idDiscord :
// define('ID_DISCORD1', 'https://discord.com/api/webhooks/URL_WEBHOOK1');
// define('ID_DISCORD2', 'https://discord.com/api/webhooks/URL_WEBHOOK2');
// Fonction qui va ENVOYER des logs sur le webhook discord
function sendLog($action, $user="") {
function sendLog($action, $user = "") {
// Si le webhook n'est pas configuré on ne bloque pas le site
if (!defined('ID_DISCORD1') || ID_DISCORD1 == '') {
return false;
}
$webhook = ID_DISCORD1; // URL du webhook Discord
// Si l'utilisateur n'est pas précisé on prend celui de la session (connecté)
if ($user == "" && isset($_SESSION['username'])) {
$user = $_SESSION['username'];
}
$contenuLog = "**Nouvelle log du portfolio**\n\n";
$contenuLog .= "**Action :** " . $action . "\n";
if ($user != "") {
$contenuLog .= "**Utilisateur :** " . $user . "\n";
} else {
$contenuLog .= "**Utilisateur :** non défini". "\n";
$contenuLog .= "**Utilisateur :** non défini" . "\n";
}
$contenuLog .= "**IP :** " . ($_SERVER['REMOTE_ADDR'] ?? 'inconnue') . "\n";
$contenuLog .= "**Date :** " . date('d/m/Y H:i:s');
$data = [
"content" => $contenuLog
@@ -28,6 +43,36 @@ function sendLog($action, $user="") {
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $dataJson);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Timeouts courts : si Discord est lent ou down, le site ne doit pas être ralenti
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 800);
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 1500);
// CORRECTION DU BUG : curl_exec() n'était jamais appelé, la requête n'était
// donc jamais envoyée à Discord. C'est pour ça que les logs n'ont jamais marché.
// (pas de curl_close : déprécié depuis PHP 8.5, la ressource se libère toute seule)
curl_exec($ch);
$codeHttp = curl_getinfo($ch, CURLINFO_HTTP_CODE);
// Discord renvoie 204 quand le message est bien envoyé
return $codeHttp == 204;
}
//
// Log de visite de page : appelée par le header sur toutes les pages
// Anti-spam : Discord limite à ~30 messages/minute par webhook, donc une même page
// n'est loguée qu'une fois par minute et par visiteur (stocké dans sa session)
function sendPageLog() {
$page = basename($_SERVER['PHP_SELF'] ?? 'inconnue');
if (!isset($_SESSION['pages_log'])) {
$_SESSION['pages_log'] = [];
}
$maintenant = time();
if (isset($_SESSION['pages_log'][$page]) && ($maintenant - $_SESSION['pages_log'][$page]) < 60) {
return; // Page déjà loguée il y a moins d'une minute pour ce visiteur
}
$_SESSION['pages_log'][$page] = $maintenant;
sendLog("Visite de la page " . $page);
}