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:
Đ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:
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 :
- Biến môi trường.
- Tệp INI hoặc .ENV.
- 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:
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:
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: