Обучение/Помощь новичкам | Подскажите пожалуйста
Всем привет подскажите пожалуйста такой код безопасный ?
Просто сделал что бы код нормально отображался в игре при отправке в почту
Просто сделал что бы код нормально отображался в игре при отправке в почту
php
// Выносим обработку текста в отдельную переменную для удобства
$msgText = (string)($post['text'] ?? '');
// Проверяем: если сообщение содержит признаки PHP-кода (например, echo, if, <?php)
if (str_contains($msgText, 'echo') || str_contains($msgText, 'if (') || str_contains($msgText, '<?php')) {
// Шаг 1: Полностью очищаем текст от двойного/тройного экранирования WAP-движка
$decodedCode = htmlspecialchars_decode(htmlspecialchars_decode($msgText, ENT_QUOTES), ENT_QUOTES);
// Шаг 2: Безопасно экранируем строго ОДИН раз, чтобы код вывелся как текст и не выполнился
$cleanCode = htmlspecialchars($decodedCode, ENT_QUOTES, 'UTF-8');
// Шаг 3: Упаковываем в красивый блок для кода
$finalMessageBody = '<pre style="background: #111; color: #ced4da; padding: 8px; border-radius: 4px; font-family: monospace; font-size: 12px; overflow-x: auto; white-space: pre-wrap; word-break: break-all; border-left: 3px solid #3980b5; margin: 4px 0;">' . $cleanCode . '</pre>';
} else {
// Если это обычное текстовое письмо — используем стандартный вывод игры
$finalMessageBody = text_msg($msgText);
}
// =========================================================================
// ВЫВОД ХТМЛ-СТРОКИ СИСТЕМЫ СООБЩЕНИЙ (Ваш оригинальный каркас)
// =========================================================================
if ($ankId !== 0) {
$safeLogin = htmlspecialchars((string)($ank['login'] ?? 'Игрок'), ENT_QUOTES, 'UTF-8');
echo "<a href='/hero/" . $ankId . "'><img src='/template/icons/" . $ankSex . ".png' width='18' height='18' alt=''> " . $safeLogin . "</a> <span style='float: right;'><font color='" . $color . "'>" . vremja((int)$post['time']) . "</font></span><br>";
echo $finalMessageBody;
} else {
echo "<img src='/template/icons/" . $ankSex . ".png' width='18' height='18' alt=''> " . $ankLogin . " <span style='float: right;'><font color='" . $color . "'>" . vremja((int)$post['time']) . "</font></span><br>";
echo $finalMessageBody;
}
вот
________
посл. ред. 29.06.2026 в 09:56; всего 1 раз(а); by pyrokinesis
php
$msgText = (string)($post['text'] ?? '');
$safeMsgText = htmlspecialchars($msgText, ENT_QUOTES, 'UTF-8');
if (strpos($safeMsgText, 'echo') !== false || strpos($safeMsgText, 'if (') !== false || strpos($safeMsgText, '<?php') !== false) {
$originalMsg = $msgText;
$decodedCode = htmlspecialchars_decode(htmlspecialchars_decode($originalMsg, ENT_QUOTES), ENT_QUOTES);
$cleanCode = htmlspecialchars($decodedCode, ENT_QUOTES, 'UTF-8');
$finalMessageBody = '<pre style="background: #111; color: #ced4da; padding: 8px; border-radius: 4px; font-family: monospace; font-size: 12px; overflow-x: auto; white-space: pre-wrap; word-break: break-all; border-left: 3px solid #3980b5; margin: 4px 0;">' . $cleanCode . '</pre>';
} else {
$finalMessageBody = $safeMsgText;
}
if ($ankId !== 0) {
$safeLogin = htmlspecialchars((string)($ank['login'] ?? 'Игрок'), ENT_QUOTES, 'UTF-8');
echo "<a href='/hero/" . (int)$ankId . "'><img src='/template/icons/" . htmlspecialchars($ankSex, ENT_QUOTES, 'UTF-8') . ".png' width='18' height='18' alt=''> " . $safeLogin . "</a> <span style='float: right;'><font color='" . htmlspecialchars($color, ENT_QUOTES, 'UTF-8') . "'>" . vremja((int)$post['time']) . "</font></span><br>";
echo $finalMessageBody;
} else {
echo "<img src='/template/icons/" . htmlspecialchars($ankSex, ENT_QUOTES, 'UTF-8') . ".png' width='18' height='18' alt=''> " . htmlspecialchars($ankLogin, ENT_QUOTES, 'UTF-8') . " <span style='float: right;'><font color='" . htmlspecialchars($color, ENT_QUOTES, 'UTF-8') . "'>" . vremja((int)$post['time']) . "</font></span><br>";
echo $finalMessageBody;
} ________
посл. ред. 29.06.2026 в 09:56; всего 1 раз(а); by pyrokinesis
Использование htmlspecialchars сразу при выводе переменных — это предотвращает XSS
Спасибо большое