10

Ứ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?

  1. Sử dụng một MySQLDatabase địa phương
  2. 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ế.
+0

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. –

Trả lời

2

Mọi thứ chỉ là vấn đề khó đảo ngược kỹ thuật mã, vì vậy, đây là một số kỹ thuật để "bảo vệ" mã đó.

  • tiền biên dịch ứng dụng của bạn để mã byte (nhưng có các công cụ để dịch ngược nó trở lại như uncompyle6)
  • sử dụng một số obfuscator mã của bạn, vì vậy nó là hầu như không thể đọc được (như pyminifier)
  • mã hóa ứng dụng của bạn (ví dụ: pyconcrete)
  • sử dụng mật khẩu người dùng để mã hóa phần quan trọng của ứng dụng khi đang di chuyển. Với mật khẩu, hacker có thể tạo lại ứng dụng không được mã hóa, nhưng không có nó, điều đó là không thể.
0

Ngay cả với khoảng cách không khí, dịch vụ có thể thực hiện được. Tuy nhiên nếu bạn không muốn làm điều này, bạn nên bảo vệ dữ liệu của bạn như thể bạn đã cho mỗi người dùng một trình khách SQL propper (như pgAdmin hoặc SQL Server Management Studio). Tôi đề nghị bạn bắt đầu cấu hình các vai trò/người dùng của bạn ở cấp cơ sở dữ liệu.

0

Vì bcrypt không còn được áp dụng và bạn có thể dễ dàng sử dụng SHA2x. Tôi nghĩ bạn cần cân nhắc sử dụng SHA2x vì lý do bảo mật. Thứ hai, bạn có thể sử dụng JWT, vì nó hoạt động 100% với python. Cũng có một cái nhìn sâu sắc về xác thực 2 yếu tố mà sẽ là một điểm cộng khác để kiểm tra bảo mật của bạn.

Các vấn đề liên quan