Skip to main content

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:#

Цель данного требования - повысить разнообразие паролей и удобство их использования, позволяя пользователям создавать надежные и запоминающиеся пароли с использованием широкого спектра символов различных языков и знаков.

  1. Printable Unicode Characters:

Универсальный стандарт кодирования символов, который присваивает уникальное числовое значение каждому символу, используемому в письменности различных языков мира, а также символам, эмодзи и специальным символам. "Printable" Unicode - это символы, которые могут быть визуально представлены на экране компьютера или напечатаны на бумаге, и они не содержат управляющих символов или символов невидимого форматирования.

  1. Language-Neutral Characters:

Символы, знаки препинания или знаки, которые не привязаны к конкретному языку и могут использоваться универсально в разных языках. В качестве примера можно привести пробелы, знаки препинания, цифры и некоторые специальные символы.

  1. Emojis:

Особая категория Unicode символов , которые представляют собой различные выражения лица, предметы, животных и многое другое. Они приобрели широкую популярность в общении и могут придать паролям креативность и индивидуальность.

Разрешение использовать в паролях печатные символы Юникода, включая пробелы и эмодзи, объясняется тремя причинами:

  1. Enhanced Diversity:

Разрешение широкого спектра символов в паролях увеличивает количество возможных комбинаций, что затрудняет злоумышленникам угадывание или взлом паролей методом "грубой силы". Такое разнообразие позволяет создавать более надежные пароли, что очень важно для защиты учетных записей пользователей и конфиденциальных данных.

  1. User-Friendly Approach:

Разрешение использования в паролях символов, не связанных с языком, и эмодзи облегчает пользователям создание и запоминание надежных паролей, которые имеют для них личное значение. Например, эмодзи придают паролям знакомый и уникальный характер, делая их более запоминающимися и приятными в использовании.

  1. Inclusivity and Multilingual Support:

Благодаря поддержке печатаемых символов Unicode приложения становятся более инклюзивными и позволяют работать с пользователями из разных языковых и культурных групп. Это особенно важно в условиях современной глобализации, когда пользователи общаются и получают доступ к веб-сервисам на разных языках.

Однако важно отметить, что, хотя OWASP рекомендует разрешить использование этих символов в паролях, приложения все же должны обеспечивать требования к минимальной длине пароля, а в идеале - не устанавливать ограничения на максимальную длину, чтобы способствовать созданию надежных и длинных парольных фраз, если пользователи сами захотят их создать.

Remediation:#

Для соответствия требованию, необходимо выполнить следующее:

  1. Character Whitelisting:

Обновить логику проверки паролей, чтобы разрешить использование любых печатаемых символов Unicode, включая нейтральные для языка символы (например, пробелы, знаки препинания) и эмодзи. Снять ограничения на использование конкретных символов, например, запрет на использование определенных символов или ограничение на ограниченный набор символов.

  1. Encoding and Storage:

Убедиться, что приложение правильно обрабатывает и кодирует символы Unicode в операциях, связанных с паролем. Использовать правильные методы кодирования для эффективной работы с символами различных языков.

  1. User Feedback:

В процессе создания пароля обеспечить четкую и удобную обратную связь, информирующую пользователей о допустимости использования различных символов, в том числе пробелов и эмодзи. Избегать отображения определенных символов как недопустимых, что может привести к путанице и недовольству.

  1. Secure Password Storage:

Перед хранением паролей в базе данных хэшировать их с помощью надежного криптографического алгоритма (например, bcrypt или Argon2). Убедиться, что база данных и приложение могут безопасно работать с символами Unicode.

  1. Testing for Unicode Support:

Провести тщательное тестирование приложения на предмет корректной обработки и хранения паролей, содержащих различные символы Юникода, включая emojis. Убедиться, что проверка, хеширование и хранение паролей работают должным образом при использовании различных символов.

  1. Review Codebase:

Провести анализ кода, чтобы убедиться в том, что функции обработки паролей и логика проверки были обновлены с учетом широкого спектра символов Unicode. Проверить, нет ли непредусмотренных ограничений на использование символов или проблем с кодировкой.

Ниже приведен пример функции проверки пароля, позволяющей использовать любой печатаемый символ Unicode, который можно интегрировать в свое приложение:

import re
# Password Validation Function Allowing Printable Unicode Characters
def is_unicode_password(password):
# Check if the password contains at least 8 characters, including printable Unicode characters
regex_pattern = r"^[ -~]{8,}$"
return re.match(regex_pattern, password)
# Example usage in your application
def user_registration():
# Get the password from the user
raw_password = input("Enter your password: ")
# Validate the password (using the updated Unicode password validation function)
if not is_unicode_password(raw_password):
print("Password must be at least 8 characters and can contain any printable Unicode character.")
return
# Hash and salt the password
# (Implement hash_password() function similar to the previous example)
# Store the hashed password in the database (simulated in this example)
print("User registration successful! Password has been securely stored.")

Выполнив эти действия и интегрировав в приложение функцию проверки паролей Unicode, вы обеспечите поддержку широкого спектра символов, в том числе нейтральных по отношению к языку символов и эмодзи, и при этом будете придерживаться лучших практик безопасности.

Additional:#

https://pages.nist.gov/800-63-3/sp800-63b.html#appA