#php #security #unicode #utf-8 #character-encoding
#php #Безопасность #Юникод #utf-8 #кодировка символов
Вопрос:
Я прочитал о паре рисков, связанных с использованием UTF-8, и, вероятно, их больше. Каковы проблемы безопасности, сложно ли их решить и перевешивают ли риски преимущества использования unicode?
http://www.erich-kachel.de/?p=806 Известно, что интерпретация не самой короткой формы UTF-8 является проблемой безопасности.
http://secunia.com/advisories/41724 Проблема безопасности вызвана тем, что функция «utf8_decode()» неправильно декодирует определенные последовательности UTF-8. Это может быть использовано, например, для обхода фильтров безопасности и последующего проведения межсайтовых скриптовых атак и SQL-инъекций.
Я бы считал себя продвинутым начинающим программистом, и я единственный человек, который занимается кодированием там, где я работаю. Наличие многоязычного веб-сайта, на котором я работаю, в настоящее время не является обязательным требованием, но в будущем это может быть.
Комментарии:
1. существуют функции, позволяющие избежать большинства атак (addslashes, mysql_real_escape_string), просто не забудьте очистить все пользовательские вводимые данные и разрешать только символы, которые, как вы знаете, безопасны ([a-zA-Z0-9_.-]). т. Д., также существует множество функций очистки пользовательского ввода, подобных приведенной здесь erich-kachel.de/?p=638 Инъекции XSS и sql — это не новая проблема…
2. Итак, пока я не добавлю средство для очистки ввода, для обеспечения безопасности я должен ограничиться символами, указанными в скобках. Я предполагаю, что ограничение сайта на ([a-zA-Z0-9_.-]) следует выполнять независимо от выбранной мной кодировки, а добавление unicode с помощью средства очистки ввода позволит мне использовать различные алфавиты с разумной безопасностью.
Ответ №1:
Джордж,
Уязвимости, о которой вы упоминаете, на самом деле около трех лет. Хотя поддержка Unicode в PHP не завершена, вы можете безопасно использовать UTF8, если принимаете стандартные меры предосторожности в отношении данных клиента (т. Е. Никогда им не доверяете) и обрабатываете свои данные достаточно осторожно. Я не думаю, что на данный момент UTF8 вызывает больше беспокойства, чем любой другой ввод.
Убедитесь, что вы не используете устаревшую версию PHP, и все готово.
Комментарии:
1. Спасибо, я думаю, что легче найти плохие новости 2-летней давности, чем что-то, говорящее, что это работает сегодня.
2. Это не проблема, и да — вы правы. Интернет — это не реляционное хранилище данных! Это не значит, что не стоит продолжать читать рекомендации по безопасности, но по большей части, проявив немного осторожности, вы можете защитить себя.
3. Если я вам помог, пожалуйста, рассмотрите возможность повышения голоса и / или принятия моего ответа, нажав на стрелку или галочку рядом с моим сообщением.