Witam,
Tworzę swego rodzaju czat i teraz zajmuję się adminpanelem. Po stworzeniu i przetestowaniu tej podstrony nadszedł czas bezpieczeństwa... Więc tworzę zabezpieczenia dla każdego inputa: htmlentities + mysql_real_escape_string + jeśli się da to ctype_alnum i strlen. Myślę, że takie zabezpieczenia są dobre, ale przejdźmy do sedna sprawy:
W adminpanelu można zbanować użytkownika i to jak najbardziej działa. Można także podać powód zawieszenia konta. I tu pojawia się problem. Gdy w tym inpucie używam zabezpieczeń i wstawiam tam polskie znaki (lubię żółć), to w powodzie pokazują się znaczki typu Webdings.
Nie jest to dla mnie zdziwieniem i spodziewałem się, że tak będzie po przefiltrowaniu inputa "powod", tylko że nie wiem jak sobie z tym poradzić. Co mogę z tym zrobić? Bardzo proszę o pomoc i z góry dziękuję :)
fragment: ADMINPANEL.PHP
if ((!empty($_POST['powodbana']) && ($_POST['zawieszenie'])))
{
$powodbana = $_POST['powodbana'];
$powodbana = htmlentities($powodbana, ENT_QUOTES, "UTF-8");
if ($rezultat = @$polaczenie->query(
sprintf("INSERT INTO `historia` (`id`, `nazwa`, `powod`) VALUES (NULL, '%s', '%s'",
mysqli_real_escape_string($polaczenie,$nick),
mysqli_real_escape_string($polaczenie,$powod))))
{
$_SESSION['powodbana'] = "$powodbana";
}
}
fragment: INDEX.PHP (jeśli jest potrzebny)
if (isset($_SESSION['zbanowany']))
{
if ($rezultat = $polaczenie->query("SELECT powod FROM historia WHERE nazwa = '$nick'"))
{
$wiersz = $rezultat->fetch_assoc();
{
$powodbana = $wiersz['powod'];
}
}
echo '<div class="error2"><br />ZOSTAŁEŚ ZBANOWANY PRZEZ ADMINISTRACJĘ DO ODWOŁANIA<br />';
echo "<b>Powód: $powodbana </b><br />";
echo 'W razie problemów proszę skontaktować się z administracją poprzez e-maila kontaktowego</div>';
unset ($_SESSION['zbanowany']);
}