Hướng dẫn how do i hide sensitive data in python? - làm cách nào để ẩn dữ liệu nhạy cảm trong python?

Bạn đã bao giờ ở trong tình huống mà bạn đang làm việc trong một dự án Python cần chia sẻ mã của bạn với ai đó hoặc bạn đang lưu trữ mã của mình trong kho lưu trữ công cộng nhưng không muốn chia sẻ thông tin nhạy cảm để nó không được khai thác bởi Người dùng ngẫu nhiên?

Ví dụ: bạn đang tạo một ứng dụng web trong Django, trong đó có một khái niệm về ‘secret_key, là khóa duy nhất được tạo ngẫu nhiên và được sử dụng để ký kết dữ liệu mật mã. Như tên cho thấy nó không nên được chia sẻ công khai vì nó đánh bại nhiều biện pháp bảo vệ bảo mật của Django. Hoặc có thể bạn đang sử dụng Cloud Storage Say AWS S3, bạn sẽ cần lưu trữ mã thông báo truy cập trong mã và cũng ngăn người dùng trái phép sử dụng sai thông tin đăng nhập, làm thế nào chúng ta có thể làm cả hai? Đối với những trường hợp như vậy, chúng ta cần ngăn chặn mã hóa cứng của ‘khóa (về cơ bản là các biến giữ thông tin đăng nhập của chúng tôi) vào mã của chúng tôi và sau đó không đưa nó vào kho lưu trữ công cộng của chúng tôi.

Phương pháp 1: Nhập từ tệp Python khác

Một trong những phương pháp dễ nhất và cơ bản nhất là lưu thông tin đăng nhập trong một tệp Python khác cho biết Secrets.py và nhập nó vào tệp cần thiết. Chúng ta cần phải .gitignore các tệp bí mật.py. Bây giờ chúng ta có thể lưu trữ thông tin đăng nhập theo hai cách, lần đầu tiên là sử dụng các biến Python để lưu trữ các giá trị và cách ưa thích thứ hai là sử dụng từ điển. Từ điển được ưu tiên bởi vì nếu chúng ta cố gắng truy cập một biến không tồn tại, nó sẽ gây ra lỗi nhưng trong trường hợp từ điển, chúng ta có thể trả về một giá trị mặc định.

Chúng tôi đã lưu các thông tin đăng nhập sau trong một từ điển trong bí mật.py:

Python3

secrets = {

    'SECRET_KEY': "superSecretkey1234",

    secrets 0: secrets 2,

    secrets 5: secrets 7,

    =0: =2

=3

Bây giờ nhập thông tin đăng nhập trong tệp cần thiết, Main.py. & nbsp;

Python3

=4 secrets =6 =7

=8= {0'SECRET_KEY'{2

{3= {0{6{7

{8{9{2

    8= {0secrets 5    5'SECRET_KEY'3__

'SECRET_KEY'5= {0=0    5: 0{2

: 2: 3: 4: 5

: 2: 3: 8: 9

: 2: 3"superSecretkey1234"2"superSecretkey1234"3

: 2: 3"superSecretkey1234"6"superSecretkey1234"7

: 2: 3,0,1,2,3

Đầu ra:

Hướng dẫn how do i hide sensitive data in python? - làm cách nào để ẩn dữ liệu nhạy cảm trong python?

Điều này hoạt động và chúng tôi không cần phải lo lắng về việc chuyển đổi kiểu dữ liệu của các giá trị boolean và số nguyên (bạn sẽ hiểu tại sao điều này quan trọng trong các phương thức sau) nhưng không phải là cách tiếp cận được đề xuất vì tên tệp và tên từ điển có thể thay đổi cho các khác nhau Các dự án để nó không tạo thành một giải pháp tiêu chuẩn. Quan trọng hơn, cách tiếp cận này được giới hạn ở Python vì trong một kịch bản thực tế hơn, chúng ta có thể làm việc với nhiều ngôn ngữ cũng yêu cầu truy cập vào cùng một thông tin và lưu trữ chúng theo cách chỉ có thể truy cập được vào một ngôn ngữ là lý tưởng. Một cách tiếp cận tốt hơn là sử dụng các biến môi trường.

Phương pháp 2: Sử dụng các biến môi trường

Chúng tôi có thể lưu trữ thông tin đăng nhập như các biến môi trường. Các biến môi trường về cơ bản là các cặp giá trị khóa được đặt bằng chức năng của hệ điều hành và có thể được sử dụng bởi bất kỳ ngôn ngữ lập trình nào vì chúng được liên kết với môi trường hoặc hệ điều hành. Vì chúng tôi đang thiết lập thông tin đăng nhập thành các biến môi trường, chúng tôi không thể đưa chúng vào mã của chúng tôi, vì vậy nếu người khác có quyền truy cập vào mã của chúng tôi, thông tin đăng nhập sẽ được đặt trong môi trường của họ. Ngoài ra, chúng tôi có thể đặt các giá trị khác nhau cho môi trường sản xuất và địa phương như sử dụng một dịch vụ gửi thư khác trong khi đang phát triển và chúng tôi không cần phải lo lắng về việc thay đổi mã. & NBSP;

Nhiều nhà cung cấp lưu trữ như Heroku, Netlify, vv cung cấp một cách dễ dàng để thiết lập các biến môi trường. Trong Python, chúng ta có thể truy cập các biến môi trường bằng cách sử dụng Os.Eniron và nó hoạt động rất giống với từ điển Python bình thường. & nbsp; os.environ trả về các giá trị chuỗi và chúng ta cần tự đánh máy theo cách thủ công mọi giá trị. Giả sử chúng tôi đã đặt các thông tin tương tự được đề cập ở trên như các biến môi trường. & nbsp;

Python3

=6 ,5

,6 ,7

    5    6     7

    ,9 secrets 00

secrets 01    6 secrets 03secrets 04

    secrets 06 secrets 07= secrets 10    4

secrets 01    6 secrets 14

    secrets 06 secrets 07= secrets 20    4

secrets 01    6 secrets 24

    secrets 26    4

secrets 01    6     7

=8= secrets 33'SECRET_KEY'____secrets 35

{3= secrets 33{6{7

secrets 41{9secrets 35

    1= secrets 33secrets 0    5    6__

'SECRET_KEY'5= secrets 33=0    5secrets 63secrets 35

: 2: 3: 4: 5

: 2: 3: 8: 9

: 2: 3"superSecretkey1234"2"superSecretkey1234"3

: 2: 3"superSecretkey1234"6"superSecretkey1234"7

: 2: 3,0,1,2,3

Đầu ra:

Hướng dẫn how do i hide sensitive data in python? - làm cách nào để ẩn dữ liệu nhạy cảm trong python?

Ngoài ra, các biến môi trường được đặt cục bộ trong quá trình phát triển chỉ tồn tại cho một phiên, vì vậy chúng tôi cần phải đặt chúng theo cách thủ công mỗi lần trước khi chúng tôi chạy dự án của mình. Để làm cho quá trình trở nên đơn giản hơn, chúng tôi có một gói tuyệt vời có tên là Python-detle. Gói giúp tải thông tin đăng nhập cả từ môi trường hoặc từ tệp .env hoặc .ini bên ngoài.persistent only for a session so we need to manually set them every time before we run our project. To make the process simpler we have an awesome package called python-decouple. The package helps in loading the credentials both from the environment or from an external .env or .ini file.

Chúng tôi lưu trữ thông tin đăng nhập trong tệp .ENV hoặc settings.ini và gitignore chúng. Python-decouple tìm kiếm các tùy chọn theo thứ tự này:gitignore them. python-decouple searches for options in this order :

  1. Biến môi trường.
  2. Tệp INI hoặc .ENV.
  3. Giá trị mặc định được thông qua trong cuộc gọi.

Nếu biến môi trường đã được đặt, nó sẽ trả về cùng một loại cố gắng đọc từ tệp và nếu không tìm thấy, nó có thể trả về một giá trị mặc định. Vì vậy, nó có thể đọc từ môi trường khi đang sản xuất và từ tập tin trong khi phát triển. & NBSP;

Thực hiện theo quy trình 3 bước đơn giản dưới đây:

Bước 1: Cài đặt Python-det bằng PIP. Install python-decouple using pip.

pip install python-decouple

Bước 2: Lưu trữ thông tin đăng nhập của bạn một cách riêng biệt. Store your credentials separately.

Đầu tiên, chúng tôi cần phải tách các thông tin đăng nhập của chúng tôi từ kho lưu trữ mã của chúng tôi vào một tệp riêng biệt. Nếu bạn đang sử dụng một hệ thống điều khiển phiên bản, hãy đảm bảo thêm tệp này vào .gitignore. Tệp phải ở một trong các biểu mẫu sau và nên được lưu tại thư mục gốc của kho lưu trữ:

  • settings.ini
  • .Env & nbsp; & nbsp; -notice không có tên cho tệp

Đây là các định dạng tệp phổ biến để lưu cấu hình cho dự án. Các tệp theo cú pháp:

Khóa = your_key & nbsp; & nbsp;-> mà không có bất kỳ trích dẫn.

Như một quy ước, chúng tôi lưu trữ tên khóa trong tất cả các mũ.

Ở đây chúng tôi đang sử dụng định dạng .ENV với các thông tin đăng nhập sau:

Hướng dẫn how do i hide sensitive data in python? - làm cách nào để ẩn dữ liệu nhạy cảm trong python?

Bây giờ, chúng tôi sẽ .gitignore tập tin này. Để biết thêm về .gitignore đọc này:gitignore this file. To know more about .gitignore read this:

Hướng dẫn how do i hide sensitive data in python? - làm cách nào để ẩn dữ liệu nhạy cảm trong python?

Bước 3: Tải thông tin đăng nhập của bạn một cách an toàn. & NBSP; Load your credentials securely. 

Chúng ta có thể đúc các giá trị bằng cách chỉ định tham số Cast Cast vào loại tương ứng. Ngoài ra, nếu chúng tôi không chỉ định giá trị mặc định và đối tượng cấu hình không thể tìm thấy khóa đã cho, nó sẽ tăng một & nbsp;

Python3

=4 secrets 88=6 secrets 90

secrets 91= secrets 93'SECRET_KEY'secrets 95

secrets 96= secrets 93secrets 99=00=

=04= secrets 93=07{7

=09=10==12secrets 95

=14= secrets 93=17,

=09=10==22{2

=24= secrets 93=27secrets 95

=29= secrets 93=32,

=09=10==37=00=secrets 03{2

: 2: 3: 4=45

: 2: 3=48=49

: 2: 3=52=53

: 2: 3=56=57

: 2: 3=60=61,2=63

Output:

Hướng dẫn how do i hide sensitive data in python? - làm cách nào để ẩn dữ liệu nhạy cảm trong python?


Làm thế nào để Python lưu trữ thông tin nhạy cảm?

Bạn có thể lưu trữ bất kỳ dữ liệu nhạy cảm ở đó.Thư viện Keyring Python là một thư viện di động có thể áp dụng trên nhiều hệ điều hành.Để lưu trữ hoặc truy xuất dữ liệu nhạy cảm của bạn, bạn cần cung cấp tên dịch vụ hoặc khóa và tên người dùng hoặc tên giá trị được lưu trữ của bạn.Các mẫu được phát triển trong Python 3.9 với thư viện Keyring phiên bản 23.1.supply service name or key and username or your stored value name. The samples is developed in Python 3.9 with keyring library version 23.1.

Làm thế nào để Python lưu trữ tên người dùng và mật khẩu?

Bạn có thể lưu trữ tên người dùng/mật khẩu trên hai dòng đầu tiên của tệp văn bản đơn giản, sau đó sử dụng Python để đọc nó khi bạn cần.Nếu tệp văn bản nằm trong thư mục kho lưu trữ, bạn nên sửa đổi.Gitignore để đảm bảo nó không được theo dõi bởi điều khiển nguồn.on the first two lines of a plain text file, then use python to read it when you need it. If the text file is in the repository directory you should modify . gitignore to ensure it's not tracked by source source control.