Hướng dẫn how to store username and password in python - cách lưu trữ tên người dùng và mật khẩu trong python

Có một vài tùy chọn để lưu trữ mật khẩu và các bí mật khác mà chương trình Python cần sử dụng, đặc biệt là một chương trình cần chạy trong nền nơi không thể yêu cầu người dùng nhập mật khẩu.

Vấn đề cần tránh:

  1. Kiểm tra mật khẩu trong để kiểm soát nguồn nơi các nhà phát triển khác hoặc thậm chí công chúng có thể nhìn thấy nó.
  2. Người dùng khác trên cùng một máy chủ đọc mật khẩu từ tệp cấu hình hoặc mã nguồn.
  3. Có mật khẩu trong một tệp nguồn nơi những người khác có thể nhìn thấy nó qua vai của bạn trong khi bạn đang chỉnh sửa nó.

Tùy chọn 1: SSH

Đây không phải lúc nào cũng là một lựa chọn, nhưng nó có lẽ là tốt nhất. Khóa riêng của bạn không bao giờ được truyền qua mạng, SSH chỉ chạy các tính toán toán học để chứng minh rằng bạn có khóa phù hợp.

Để làm cho nó hoạt động, bạn cần như sau:

  • Cơ sở dữ liệu hoặc bất cứ điều gì bạn đang truy cập cần phải được SSH truy cập. Hãy thử tìm kiếm "SSH" cộng với bất kỳ dịch vụ nào bạn đang truy cập. Ví dụ: "SSH Postgresql". Nếu đây không phải là một tính năng trên cơ sở dữ liệu của bạn, hãy chuyển sang tùy chọn tiếp theo.
  • Tạo một tài khoản để chạy dịch vụ sẽ thực hiện các cuộc gọi đến cơ sở dữ liệu và tạo khóa SSH.
  • Thêm khóa công khai vào dịch vụ bạn sẽ gọi hoặc tạo tài khoản cục bộ trên máy chủ đó và cài đặt khóa công khai ở đó.

Tùy chọn 2: Biến môi trường

Đây là đơn giản nhất, vì vậy nó có thể là một nơi tốt để bắt đầu. Nó được mô tả tốt trong ứng dụng mười hai yếu tố. Ý tưởng cơ bản là mã nguồn của bạn chỉ cần lấy mật khẩu hoặc các bí mật khác từ các biến môi trường và sau đó bạn định cấu hình các biến môi trường trên mỗi hệ thống nơi bạn chạy chương trình. Nó cũng có thể là một liên lạc tốt đẹp nếu bạn sử dụng các giá trị mặc định sẽ hoạt động cho hầu hết các nhà phát triển. Bạn phải cân bằng điều đó so với việc làm cho phần mềm của bạn "an toàn theo mặc định".

Dưới đây là một ví dụ kéo máy chủ, tên người dùng và mật khẩu từ các biến môi trường.

import os

server = os.getenv('MY_APP_DB_SERVER', 'localhost')
user = os.getenv('MY_APP_DB_USER', 'myapp')
password = os.getenv('MY_APP_DB_PASSWORD', '')

db_connect(server, user, password)

Tra cứu cách đặt các biến môi trường trong hệ điều hành của bạn và xem xét chạy dịch vụ trong tài khoản của chính nó. Bằng cách đó, bạn không có dữ liệu nhạy cảm trong các biến môi trường khi bạn chạy các chương trình trong tài khoản của riêng bạn. Khi bạn thiết lập các biến môi trường đó, hãy cẩn thận hơn rằng người dùng khác không thể đọc chúng. Kiểm tra quyền tệp, ví dụ. Tất nhiên, bất kỳ người dùng nào có quyền root sẽ có thể đọc chúng, nhưng điều đó không thể được giúp đỡ. Nếu bạn đang sử dụng SystemD, hãy xem đơn vị dịch vụ và cẩn thận sử dụng EnvironmentFile thay vì Environment cho bất kỳ bí mật nào. Các giá trị Environment có thể được xem bởi bất kỳ người dùng nào có systemctl show.

Tùy chọn 3: Tệp cấu hình

Điều này rất giống với các biến môi trường, nhưng bạn đọc các bí mật từ một tệp văn bản. Tôi vẫn tìm thấy các biến môi trường linh hoạt hơn cho những thứ như công cụ triển khai và máy chủ tích hợp liên tục. Nếu bạn quyết định sử dụng tệp cấu hình, Python sẽ hỗ trợ một số định dạng trong thư viện tiêu chuẩn, như JSON, INI, NETRC và XML. Bạn cũng có thể tìm thấy các gói bên ngoài như Pyyaml ​​và Toml. Cá nhân, tôi thấy JSON và YAML đơn giản nhất để sử dụng và YAML cho phép bình luận.

Ba điều cần xem xét với các tệp cấu hình:

  1. Tệp ở đâu? Có thể là một vị trí mặc định như ~/.my_app và tùy chọn dòng lệnh để sử dụng một vị trí khác.
  2. Đảm bảo người dùng khác không thể đọc tệp.
  3. Rõ ràng, đừng cam kết tệp cấu hình vào mã nguồn. Bạn có thể muốn cam kết một mẫu mà người dùng có thể sao chép vào thư mục nhà của họ.

Tùy chọn 4: Mô -đun Python

Một số dự án chỉ đưa bí mật của họ vào một mô -đun Python.

# settings.py
db_server = 'dbhost1'
db_user = 'my_app'
db_password = 'correcthorsebatterystaple'

Sau đó nhập mô -đun đó để có được các giá trị.

# my_app.py
from settings import db_server, db_user, db_password

db_connect(db_server, db_user, db_password)

Một dự án sử dụng kỹ thuật này là Django. Rõ ràng, bạn không nên cam kết settings.py để kiểm soát nguồn, mặc dù bạn có thể muốn cam kết một tệp có tên settings_template.py mà người dùng có thể sao chép và sửa đổi.

Tôi thấy một vài vấn đề với kỹ thuật này:

  1. Các nhà phát triển có thể vô tình cam kết tập tin để kiểm soát nguồn. Thêm nó vào
    # settings.py
    db_server = 'dbhost1'
    db_user = 'my_app'
    db_password = 'correcthorsebatterystaple'
    
    0 làm giảm rủi ro đó.
  2. Một số mã của bạn không thuộc kiểm soát nguồn. Nếu bạn bị kỷ luật và chỉ đặt các chuỗi và số vào đây, đó sẽ không phải là vấn đề. Nếu bạn bắt đầu viết các lớp bộ lọc ghi nhật ký ở đây, hãy dừng lại!

Nếu dự án của bạn đã sử dụng kỹ thuật này, thật dễ dàng để chuyển sang các biến môi trường. Chỉ cần di chuyển tất cả các giá trị cài đặt sang các biến môi trường và thay đổi mô -đun Python để đọc từ các biến môi trường đó.

Làm cách nào để tạo tên người dùng và trình tạo mật khẩu trong Python?

Cách mã hóa một trình tạo mật khẩu trong Python [trong 4 bước]..
Bước 1: Nhập các mô -đun cần thiết. Bước đầu tiên, hãy nhập mô -đun bí mật. ....
Bước 2: Xác định bảng chữ cái. Bước tiếp theo là xác định bảng chữ cái. ....
Bước 3: Khắc phục độ dài của mật khẩu; Tạo mật khẩu. ....
Bước 4: Tùy chỉnh mật khẩu của bạn dựa trên các ràng buộc ..

Thông tin đăng nhập Python được lưu trữ ở đâu?

Thay vì lưu trữ mật khẩu trong tệp không được bảo vệ, thay vào đó chúng tôi có thể sử dụng khóa của hệ thống, đây là một ứng dụng có thể lưu trữ thông tin đăng nhập an toàn trong tệp được mã hóa trong thư mục nhà của bạn.encrypted file in your home directory.

Làm thế nào để bạn đặt một mật khẩu trên một tệp trong Python?

Bảo vệ một tài liệu Word bằng mật khẩu trong Python..
Đầu tiên, tải tài liệu từ bằng lớp tài liệu ..
Tạo một đối tượng của lớp OoxMLSaveOptions (để lưu ở định dạng DOC, sử dụng lớp docsaveoptions thay thế) ..
Đặt mật khẩu bằng OoxMLSaveOptions.Tài sản mật khẩu ..
Cuối cùng, lưu tài liệu từ được bảo vệ bằng tài liệu ..

Làm cách nào để mã hóa mật khẩu và tên người dùng trong Python?

Steps:..
Nhập thư viện RSA ..
Tạo khóa công khai và riêng tư với RSA.....
Mã hóa chuỗi thành chuỗi byte ..
Sau đó mã hóa chuỗi byte bằng khóa công khai ..
Sau đó chuỗi được mã hóa có thể được giải mã bằng khóa riêng ..
Khóa công khai chỉ có thể được sử dụng để mã hóa và riêng tư chỉ có thể được sử dụng để giải mã ..