Проверка соблюдения принципа "отказ по умолчанию", при котором новые пользователи/роли начинают с минимальными или нулевыми правами
Описание
Это требование подразумевает, что в приложении должен быть реализован принцип "отказ по умолчанию" (deny by default). Это означает, что новые пользователи и роли должны начинать с минимальными или нулевыми правами доступа, и только после явного предоставления прав они могут получить доступ к определенным ресурсам или функциям.
Почему это важно
- Безопасность: Принцип "отказ по умолчанию" снижает риск несанкционированного доступа, так как новые пользователи не имеют прав, пока они не будут явно предоставлены.
- Контроль доступа: Это позволяет администраторам более точно управлять правами доступа, предоставляя их только тем пользователям, которым они действительно необходимы.
- Соблюдение стандартов: Многие стандарты безопасности требуют применения принципа "отказ по умолчанию" для защиты конфиденциальной информации.
- Устойчивость к атакам: Этот принцип делает систему более устойчивой к атакам, связанным с несанкционированным доступом.
Способы реализации с примерами
Определение прав доступа по умолчанию: Убедитесь, что новые пользователи и роли имеют минимальные или нулевые права доступа.
Пример (реализация контроля доступа в Python с использованием Flask):
from flask import Flask, request, jsonify
app = Flask(__name__)
# Пример базы данных пользователей и их прав доступа
users = {
'new_user': {'permissions': []}, # Новый пользователь с нулевыми правами
'admin_user': {'permissions': ['view_content', 'edit_content']}
}
@app.route('/access_resource', methods=['GET'])
def access_resource():
user_id = request.headers.get('X-User-ID')
user = users.get(user_id)
if not user:
return jsonify({"error": "User not found"}), 404
# Проверка прав доступа
if 'view_content' in user['permissions']:
return jsonify({"message": "Access granted to content."}), 200
else:
return jsonify({"error": "Access denied."}), 403
if __name__ == '__main__':
app.run()
Явное предоставление прав доступа: Реализуйте механизм, позволяющий администраторам явно предоставлять права доступа пользователям.
Пример (предоставление прав доступа):
@app.route('/grant_permission', methods=['POST'])
def grant_permission():
user_id = request.json.get('user_id')
permission = request.json.get('permission')
if user_id in users:
users[user_id]['permissions'].append(permission)
return jsonify({"message": f"Permission '{permission}' granted to {user_id}."}), 200
else:
return jsonify({"error": "User not found."}), 404
Примеры уязвимого кода
# Пример уязвимого кода на Python
users = {
'new_user': {'permissions': ['view_content', 'edit_content']}, # Новый пользователь с избыточными правами
}
@app.route('/access_resource', methods=['GET'])
def access_resource():
user_id = request.headers.get('X-User-ID')
user = users.get(user_id)
if not user:
return jsonify({"error": "User not found"}), 404
# Проверка прав доступа
if 'view_content' in user['permissions']:
return jsonify({"message": "Access granted to content."}), 200
else:
return jsonify({"error": "Access denied."}), 403
Проблема: Если новые пользователи получают избыточные права по умолчанию, это увеличивает риск несанкционированного доступа.
Причины, к которым может привести несоблюдение требования
- Уязвимость к несанкционированному доступу: Если новые пользователи получают права по умолчанию, злоумышленники могут воспользоваться этим для получения доступа к конфиденциальной информации.
- Проблемы с безопасностью данных: Компрометация учетной записи может привести к утечкам конфиденциальной информации и повреждению данных.
- Нарушение стандартов: Несоблюдение требований по безопасности может привести к юридическим последствиям и штрафам.
Рекомендации
- Реализуйте принцип "отказ по умолчанию" для новых пользователей и ролей.
- Убедитесь, что новые пользователи начинают с минимальными или нулевыми правами доступа.
- Регулярно проверяйте код на наличие уязвимостей, связанных с контролем доступа.
- Обучите сотрудников важности соблюдения политики безопасности и управления правами доступа.