Вообще, я бы раздеться все символы, которые не английский, используя что-то вроде:Как я могу дезинфицировать строку, сохраняя при этом все неанглийскую поддержку алфавита
$file = filter_var($file, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH);
однако, я устал, не оказывает поддержку пользователей ввод с других языков, которые могут быть в виде загруженного файла (имя файла может быть на кириллице или на китайском, или на арабском языке и т. д.), или в поле формы, или даже на контент из WYSIWYG.
Примеров для санитарной обработки данных по отношению к этому, приходит в одной из двух форм
- Те, что полоса всех символов, которые не английский
- Те, которые преобразуют все символы, которые не являются английским языком для Английское письмо заменяет.
Проблема с этой практикой заключается в том, что у вас сломанная структура, которая притворяется, что поддерживает несколько языков, однако она действительно не исключает возможности отображения на их языке ярлыков или контента.
Существует множество атак, которые используют поддержку unicode/utf-8/utf-16/etc, передающую нулевые байты и т. Д., Поэтому ясно, что не дезинформирование данных не является вариантом.
Есть ли способ очистить переменную от произвольных команд, сохраняя при этом полные алфавиты/символы этих других языков, но в общих чертах вычеркивая все возможные непечатаемые символы, символы с нулями в них как часть символа, и других подобных эксплойтов, сохраняя при этом целостность фактических символов, введенных пользователем? Вышеприведенная команда идеальна и делает все как угодно, но было бы здорово, если бы был способ расширить ее, чтобы поддерживать поддержку всех языков.
Я использовал null в качестве примера. Просто проверка UTF-8 или нет не очищает входные данные (чтобы сохранить его) «плохие» символы или строки. Плохо, я имею в виду вред.Если вы посмотрите, что делает пример 'filter_var', вы поймете, что я ищу. Он делает больше, чем полоса 1 символ. Он удаляет html и т. Д., А также создает плохие символы. –
Моим личным подходом было бы исправить мое программное обеспечение, чтобы избежать ошибок, прежде чем интегрировать их в HTML или SQL-запросы. Еще лучше, создайте программное обеспечение на основе, которая делает почти невозможным испортить эти вещи. Теперь, учитывая ваш ответ, я бы сказал, что ваш вопрос нуждается в более подробных разъяснениях. Во-первых, какие байтовые последовательности вы хотите отклонить, какие должны проходить без изменений и какие из них следует скорректировать? Какие из этих требований не выполняются 'filter_var()' с соответствующими флагами? –
рассмотрите имена файлов> شعار. Jpg или 标志 .png или логотип.png. Конечно, просто «побег» почти забавен, чтобы думать, что побег также испортит имена. Теперь расширьте это для реальных путей, которые содержат эти языки (ака, «альбом 1» или то, что пользователь решает на любом языке). У меня создается впечатление, что на самом деле это не способ сделать это, помимо ручного хеширования всего «алфавита» этих языков, который сделает такие вещи, как китайский, очень сложно пройти, не допуская нечетных символов, которые могут быть использованы для использования сервера , –