Intereting Posts
Настройка Solr с использованием Java для модифицированного вывода? Могу ли я получить CONST в классе PHP? Zend_Session не позволяет вам уничтожать и воссоздавать сеанс Как я могу исключить файлы CSS, JS, JPG, GIF из правил mod_rewrite? Laravel 5: как я могу получить и отобразить все сообщения, относящиеся к определенной категории Как структурировать javascript при включении другого php-файла Преобразование HTML в PDF в php онлайн Лог ошибок еще более подробно с Symfony2 Форма входа в PHP с формой HTML Почта переходит к спаму вместо входящих и некоторых ошибок в заголовке части почты с помощью PHP C & PHP: Сохранение настроек в целых числах с помощью побитовых операторов? как реализовать прикованный выбор с использованием Mysql Php и запроса разрывы строк в текстовом поле Установка CodeIgniter в корневом каталоге и WordPress в подкаталоге Высокие значения круговых диаграмм HighCharts X-axies не отображаются при попытке получить данные из базы данных MySQL с помощью PHP

Зачем вызывать mb_convert_encoding для дезинфекции текста?

Это относится к этому (отличному) ответу . Он утверждает, что лучшим решением для экранирования ввода в PHP является вызов mb_convert_encoding, за которым следует html_entities .

Но почему именно вы бы назвали mb_convert_encoding с теми же параметрами и с параметрами (UTF8)?

Выдержка из исходного ответа:

Даже если вы используете htmlspecialchars ($ string) за пределами HTML-тегов, вы по-прежнему уязвимы для многобайтовых символов атаки набора символов.

Наиболее эффективным может быть использование комбинации mb_convert_encoding и htmlentities следующим образом.

$str = mb_convert_encoding($str, 'UTF-8', 'UTF-8'); $str = htmlentities($str, ENT_QUOTES, 'UTF-8'); 

Есть ли у меня какая-то польза, которую мне не хватает?

Не все двоичные данные действительны UTF8. Вызов mb_convert_encoding с тем же из / в кодирование – это простой способ убедиться, что вы имеете дело с правильно кодированной строкой для данной кодировки.

Способ использования пропусков проверки UTF8 описан в разделе 6 (соображения безопасности) в rfc2279 :

Другим примером может быть синтаксический анализатор, который запрещает октетную последовательность 2F 2E 2E 2F («/../»), но разрешает незаконную последовательность октетов 2F C0 AE 2E 2F.

Это может быть более легко понято путем изучения двоичного представления:

 110xxxxx 10xxxxxx # header bits used by the encoding 11000000 10101110 # C0 AE 00101110 # 2E the '.' character 

Другими словами: (C0 AE - header-bits) == '.'

Как указано в цитированном тексте, C0 AE не является допустимой последовательностью октетов UTF8, поэтому mb_convert_encoding бы ее из строки (или перевел ее на '.' Или что-то еще :-).