Что-то я нафильтрировал, правильно я обработал ? Моя esc() - mysqli_escape_string PHP: function htmlEnc($string) { $string = htmlspecialchars($string, ENT_QUOTES, 'UTF-8'); $k = ['&', '"', ''', '<', '>']; $x = ['&', '"', '\'', '<', '>']; return str_replace($k, $x, $string); } Решил отдельно не обрабатывать $_POST, пустил по кругу ))) PHP: $username = htmlEnc(esc(trim($_POST['username']))); В базу так и заносятся символы <> и на странице выводятся <> Что-то моей логике не поддается функцию сообразил , htmlspecialchars($string, ENT_QUOTES, 'UTF-8') этот момент понятен в крякозябры я превратил , ниже я из этих крязозябр вывожу обратно в символы. И ВОПРОС , вставив в базу данных/или форму ввода <script>...</script> внедрится ли он в код ? Вроде и htmlspecialchars есть , а вроде после его я обратно символы вернул Как бы и фильтр есть и как бы всё вернул , вопрос на хрена тогда я эти все махинации проводил. Но типа подсказали если хочешь вернуть сиволы перезапиши их обратно
Добрый день! Уточню вопрос: Будет ли исполняться JS , если в PHP вместо "<script>...</script>", записать, например, "<script><script>alert(2)</script></script>"? В первом случае браузер интерпретирует строку как JS, во втором внедрит в НTML код, но не исполнит JS. PHP: <? $k = ['&', '"', ''', '<', '>']; $x = ['&', '"', '\'', '<', '>']; $str1 =implode(" ", $k); $str2 =implode(" ", $x); $script1 = "<script>alert(1)</script>"; $script2 = "<script>alert(2)</script>"; echo <<<HTML $str1<br> $str2<br> $script1 $script2 HTML; /* Output: & " ' < > & " ' < > <script>alert(2)</script> */ ?> Удачи!
Нефиг использовать велосипеды, подготовленные выражения для сохранения в БД. А для вывода - экранирование через htmlspecialchars
Mля, нафига кодировать в HTML, чтобы потом осн. сущности заменять обратно? --- Добавлено --- Ну, тогда ее нужно запускать в последнюю очередь перед записью в БД --- Добавлено --- Самая простая стратегия для коротких строк, как выше написали, кодировать в HTML при выводе (если вывод выполняется на Web-страницу и т.п.). Экранирование для записи в БД и HTML-кодирование смешивать не стоит. Для записи обычно лучше просто использовать подготовленные запросы. --- Добавлено --- Под короткими я подразумевал строки, в которых не должны оставаться теги. Конечно, такие строки могут бы и длинными. Но кодировать при выводе лучше только короткие строки. Кодировать при вводе сложнее. Например, размер поля username в БД нужно делать в пять раз больше макс. длины до кодирования.
Предлагаю пойти дальше отказаться от prepare и html special chars , и всё вылизывать регулярками. А что ?)) Я хочу на сайте себе ник < kick > , конечный итог 90% примеров в Гугле учит нас четко идти по шаблону 2002 года a-zA-Z0-9 , моё мнение на сегодня пользователь никак не в вводе пароля не в вводе имени не стоит ограничивать , и как отобразится ник без велосипеда в чистом виде после обработки htmlspecialchars? < kick >
Хоть бы один нормальный человек написал что < kick > автоматически преобразовываются при выводе на страницу htmlspecialchars, а я почитал в доке что они конвертируются в сущности не проверил изобрел целую схему как вернуть обратно открыл обратно дырки и думаю как бы их обработать
Ну, нормальные люди, прежде чем что-то делать, обычно имеют представление о том, зачем это делать. Мы как бы на нормальных ориентировались --- Добавлено --- Тут тоже все просто и логично. Если теги, например <br>, имеют особое значение, должен быть способ выводить аналогичный текст.