Skip to main content

V4.1.5 General Access Control Design

Requirement:#

Verify that access controls fail securely including when an exception occurs. (C10)

Explanation:#

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

Remediation:#

Чтобы убедиться, что элементы управления доступом не работают безопасно:

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

Вот пример кода на Python, который реализует безопасное поведение при сбое для управления доступом:

import logging
def access_check(file_path):
try:
# Check if the user has permission to access the file
if os.access(file_path, os.R_OK):
return True
else:
raise PermissionError("You do not have permission to access this file.")
except Exception as e:
logging.error("Access control check failed: %s", e)
return False
def read_file(file_path):
# Verify the access control check passes before attempting to read the file
if access_check(file_path):
with open(file_path, 'r') as f:
return f.read()
else:
raise PermissionError("You do not have permission to read this file.")

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

Additional:#

https://cheatsheetseries.owasp.org/cheatsheets/Authorization_Cheat_Sheet.html