Dofus
This commit is contained in:
+49
-4
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user