-
Notifications
You must be signed in to change notification settings - Fork 1
/
abuse.php
133 lines (124 loc) · 5.96 KB
/
abuse.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
<?php
/*
* Copyright 2008-2024 Anael MOBILIA
*
* This file is part of image-heberg.fr.
*
* image-heberg.fr is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* image-heberg.fr is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with image-heberg.fr. If not, see <http://www.gnu.org/licenses/>
*/
namespace ImageHeberg;
if (!defined('_PHPUNIT_')) {
require 'config/config.php';
}
// Anti flood
$maSession = new SessionObject();
$msgErreur = '';
require _TPL_TOP_;
// En cas de validation du formulaire
if (
isset($_POST['Submit']) && $maSession->checkFlag()
&& !empty($_POST['userMail']) && !empty($_POST['urlImage'])
) {
// Suivi du traitement
$isTraitee = false;
// Vérification du bon format de l'adresse mail
if (filter_var($_POST['userMail'], FILTER_VALIDATE_EMAIL) !== false) {
// On essaie de matcher l'image - nettoyage des paramètres
$fileName = basename(parse_url(trim($_POST['urlImage']), PHP_URL_PATH));
if (
preg_match('#^[\d]+\.(?:' . implode('|', _ACCEPTED_EXTENSIONS_) . ')$#', $fileName)
|| (_PHPUNIT_ && $fileName === 'image_15.png')
) {
// Suivi du traitement
$isTraitee = true;
// On flaggue l'image en signalée en BDD
$monImage = new ImageObject($fileName);
// Si l'image est approuvée, on ne la bloque pas en automatique
if (!$monImage->isApprouvee()) {
$monImage->setSignalee(true);
$monImage->sauver();
// On cherche les autres images avec le même MD5
$images = HelperAdmin::getImageByMd5($monImage->getMd5());
foreach ($images as $uneImage) {
// On flaggue en signalée...
$monImage = new ImageObject($uneImage);
$monImage->setSignalee(true);
$monImage->sauver();
}
// Les miniatures reprennent automatiquement les informations de l'image parent
} else {
$isTraitee = false;
}
}
// Gestion travis
if (!_PHPUNIT_) {
// Je complète le message avec l'IP de mon émeteur
$message = 'URL : ' . $_POST['urlImage'];
$message .= PHP_EOL . 'Blocage automatique : ' . ($isTraitee ? 'OK' : 'KO');
$message .= PHP_EOL . 'Raison : ' . $_POST['raison'];
$message .= PHP_EOL . 'Message : ' . $_POST['userMessage'];
$message .= PHP_EOL . '---------------------------------------------';
$message .= PHP_EOL . 'IP : ' . $_SERVER['REMOTE_ADDR'];
$message .= PHP_EOL . 'BROWSER : ' . $_SERVER['HTTP_USER_AGENT'];
$message .= PHP_EOL . 'DATE : ' . date('Y-m-d H:i:s');
// Tout va bien, on envoit un mail
$subject = '[' . _SITE_NAME_ . '] - Signalement d\'image';
mail(_ADMINISTRATEUR_EMAIL_, $subject, $message, 'From: ' . $_POST['userMail']);
$maSession->removeFlag();
}
// Retour utilisateur
echo '<div class="alert alert-success">Votre signalement a été envoyé, merci !</div>';
} else {
// Adresse mail invalide
$msgErreur = '<div class="alert alert-danger">Votre adresse mail n\'est pas valide !<br /><pre>' . $_POST['userMail'] . '</pre></div>';
}
} elseif (!isset($_POST['Submit'])) {
// Premier affichage de la page => activation de la protection robot
$maSession->setFlag();
}
?>
<?php if (!isset($_POST['Submit']) || $maSession->checkFlag()) : ?>
<h1 class="mb-3"><small>Signaler une image</small></h1>
<?= $msgErreur ?>
<form method="post">
<div class="mb-3 form-floating">
<input type="text" class="form-control" name="urlImage" id="urlImage" required="required" value="<?= $_POST['urlImage'] ?? '' ?>">
<label for="urlImage">Adresse de l'image</label>
<div class="form-text text-muted">
Indiquer toute l'URL de l'image, telle qu'affichée dans le navigateur (<?= _URL_IMAGES_ . _IMAGE_BAN_ ?>).
</div>
</div>
<div class="mb-3 form-floating">
<select name="raison" id="raison" class="form-select" required="required">
<option value="" selected>-- Sélectionner une raison --</option>
<option value="porno">Pornographie et érotisme</option>
<option value="phishing">Spam et phishing</option>
<option value="legislation">Non respect de la législation française (à préciser)</option>
<option value="autre">Autre (à préciser)</option>
</select>
<label for="raison">Raison du signalement</label>
</div>
<div class="mb-3 form-floating">
<input type="email" class="form-control" name="userMail" id="userMail" required="required" value="<?= $_POST['userMail'] ?? '' ?>">
<label for="userMail">Votre adresse courriel</label>
<div class="form-text text-muted">Sera utilisée uniquement pour vous apporter une réponse.</div>
</div>
<div class="mb-3 form-floating">
<textarea class="form-control" rows="5" name="userMessage" id="userMessage" placeholder="Informations complémentaires sur la raison de votre demande" required="required"><?= $_POST['userMessage'] ?? '' ?></textarea>
<label for="userMessage">Votre message</label>
</div>
<button type="submit" name="Submit" class="btn btn-success">Envoyer</button>
</form>
<?php endif; ?>
<?php require _TPL_BOTTOM_ ?>