V2.1.4 Password Security
Requirement:#
Verify that any printable Unicode character, including language neutral characters such as spaces and Emojis are permitted in passwords.
Explanation:#
Цель данного требования - повысить разнообразие паролей и удобство их использования, позволяя пользователям создавать надежные и запоминающиеся пароли с использованием широкого спектра символов различных языков и знаков.
- Printable Unicode Characters:
Универсальный стандарт кодирования символов, который присваивает уникальное числовое значение каждому символу, используемому в письменности различных языков мира, а также символам, эмодзи и специальным символам. "Printable" Unicode - это символы, которые могут быть визуально представлены на экране компьютера или напечатаны на бумаге, и они не содержат управляющих символов или символов невидимого форматирования.
- Language-Neutral Characters:
Символы, знаки препинания или знаки, которые не привязаны к конкретному языку и могут использоваться универсально в разных языках. В качестве примера можно привести пробелы, знаки препинания, цифры и некоторые специальные символы.
- Emojis:
Особая категория Unicode символов , которые представляют собой различные выражения лица, предметы, животных и многое другое. Они приобрели широкую популярность в общении и могут придать паролям креативность и индивидуальность.
Разрешение использовать в паролях печатные символы Юникода, включая пробелы и эмодзи, объясняется тремя причинами:
- Enhanced Diversity:
Разрешение широкого спектра символов в паролях увеличивает количество возможных комбинаций, что затрудняет злоумышленникам угадывание или взлом паролей методом "грубой силы". Такое разнообразие позволяет создавать более надежные пароли, что очень важно для защиты учетных записей пользователей и конфиденциальных данных.
- User-Friendly Approach:
Разрешение использования в паролях символов, не связанных с языком, и эмодзи облегчает пользователям создание и запоминание надежных паролей, которые имеют для них личное значение. Например, эмодзи придают паролям знакомый и уникальный характер, делая их более запоминающимися и приятными в использовании.
- Inclusivity and Multilingual Support:
Благодаря поддержке печатаемых символов Unicode приложения становятся более инклюзивными и позволяют работать с пользователями из разных языковых и культурных групп. Это особенно важно в условиях современной глобализации, когда пользователи общаются и получают доступ к веб-сервисам на разных языках.
Однако важно отметить, что, хотя OWASP рекомендует разрешить использование этих символов в паролях, приложения все же должны обеспечивать требования к минимальной длине пароля, а в идеале - не устанавливать ограничения на максимальную длину, чтобы способствовать созданию надежных и длинных парольных фраз, если пользователи сами захотят их создать.
Remediation:#
Для соответствия требованию, необходимо выполнить следующее:
- Character Whitelisting:
Обновить логику проверки паролей, чтобы разрешить использование любых печатаемых символов Unicode, включая нейтральные для языка символы (например, пробелы, знаки препинания) и эмодзи. Снять ограничения на использование конкретных символов, например, запрет на использование определенных символов или ограничение на ограниченный набор символов.
- Encoding and Storage:
Убедиться, что приложение правильно обрабатывает и кодирует символы Unicode в операциях, связанных с паролем. Использовать правильные методы кодирования для эффективной работы с символами различных языков.
- User Feedback:
В процессе создания пароля обеспечить четкую и удобную обратную связь, информирующую пользователей о допустимости использования различных символов, в том числе пробелов и эмодзи. Избегать отображения определенных символов как недопустимых, что может привести к путанице и недовольству.
- Secure Password Storage:
Перед хранением паролей в базе данных хэшировать их с помощью надежного криптографического алгоритма (например, bcrypt или Argon2). Убедиться, что база данных и приложение могут безопасно работать с символами Unicode.
- Testing for Unicode Support:
Провести тщательное тестирование приложения на предмет корректной обработки и хранения паролей, содержащих различные символы Юникода, включая emojis. Убедиться, что проверка, хеширование и хранение паролей работают должным образом при использовании различных символов.
- Review Codebase:
Провести анализ кода, чтобы убедиться в том, что функции обработки паролей и логика проверки были обновлены с учетом широкого спектра символов Unicode. Проверить, нет ли непредусмотренных ограничений на использование символов или проблем с кодировкой.
Ниже приведен пример функции проверки пароля, позволяющей использовать любой печатаемый символ Unicode, который можно интегрировать в свое приложение:
Выполнив эти действия и интегрировав в приложение функцию проверки паролей Unicode, вы обеспечите поддержку широкого спектра символов, в том числе нейтральных по отношению к языку символов и эмодзи, и при этом будете придерживаться лучших практик безопасности.