Ứng dụng tôi phát triển ra lệnh cho rằng phần mềm nên ngăn chặn truy cập trái phép. Để thực hiện điều này, tôi đã sử dụng xác thực dựa trên người dùng và mật khẩu với hai vai trò có sẵn - người dùng và quản trị viên chuẩn.Xác thực và ủy quyền người dùng một cách an toàn trong ứng dụng máy tính để bàn Python PyQt
Điều này đã được triển khai hoàn toàn bằng Python bằng cách sử dụng SQLAlchemy để tương tác với cơ sở dữ liệu, PyQt cho giao diện người dùng.
Mật khẩu đã nhập được băm bằng brcypt và sau đó được so sánh với hàm băm trên cơ sở dữ liệu cho tên người dùng tương ứng (kỹ thuật xác thực tiêu chuẩn được sử dụng trong các dịch vụ web).
Sau khi xác thực thành công, một biến được gọi là self.authenticatedUser
giữ một phiên bản SQLAlchemy của lớp User
.
Hậu quả của việc thực hiện này là ai cũng có thể chỉnh sửa các phương pháp đăng nhập chỉ đơn giản là truy vấn cơ sở dữ liệu trực tiếp cho một đối tượng kiểu User
với Tên truy nhập quản trị và phân công các trường hợp SQLAlchemy trở của User
để self.authenticatedUser
và bingo các hacker đã truy cập vào hệ thống.
Vì, tôi phân phối phần mềm này được viết bằng python, chỉ mất vài phút cho một hacker (hoặc bất kỳ loại lập trình viên nào) để vô hiệu hóa cơ chế xác thực. Ngoài ra, tôi không thể sử dụng dịch vụ web tại đây để xác thực hoặc ủy quyền bằng cách nhận mã thông báo đăng nhập vì phần mềm sẽ được sử dụng trong môi trường có số air gap.
Có cách nào cụ thể để thực hiện điều này một cách an toàn không?
- Sử dụng một MySQLDatabase địa phương
- Sử dụng một (tương đối khó có thể đảo ngược kỹ sư có lẽ sẽ thích hợp) an toàn cơ chế.
Bạn có thể nghĩ về việc phân phối nó với [PyInstaller] (http://www.pyinstaller.org/) dưới dạng nhị phân hệ điều hành. SQLAlchemy và PyQt nằm trong danh sách các gói được hỗ trợ. PyInstaller thậm chí còn hỗ trợ PyCrypto. –