Приложение, которое я разрабатываю, требует, чтобы программное обеспечение предотвращало несанкционированный доступ. Чтобы реализовать это, я использовал аутентификацию на основе пользователя и пароля с двумя доступными ролями — обычным пользователем и администратором.
Это было полностью реализовано на Python с использованием SQLAlchemy для взаимодействия с базой данных и PyQt для пользовательского интерфейса.
Введенный пароль хэшируется с помощью brcypt, а затем сравнивается с хэшем, присутствующим в базе данных для соответствующего имени пользователя (стандартный метод аутентификации, используемый в веб-сервисах).
После успешной аутентификации переменная с именем self.authenticatedUser
содержит экземпляр SQLAlchemy класса User
.
Следствием этой реализации является то, что любой может отредактировать метод входа в систему, чтобы просто запросить базу данных напрямую для объекта типа User
с именем пользователя admin и назначить возвращенный экземпляр SQLAlchemy User
на self.authenticatedUser
, и бинго, хакер имеет доступ к системе.
Поскольку я распространяю это программное обеспечение, написанное на Python, хакер (или любой другой программист) может за несколько минут отключить механизм аутентификации. Кроме того, я не могу использовать здесь веб-службу для аутентификации или авторизации путем получения токена входа в систему, потому что программное обеспечение будет использоваться в среде с воздушный зазор.
Существуют ли какие-либо конкретные способы реализовать это более безопасным способом?
- Использование локальной базы данных MySQL
- Использование безопасного (относительно трудно реконструируемого) механизма.