Người giữ két trước tiên sẽ thiết lập két với mật khẩu gồm 6 chữ số và số lần thử tối đa mà một người có thể thực hiện để truy cập vào két.
Sử dụng két sắtKét sẽ yêu cầu mật khẩu gồm 6 chữ số để mở. Mỗi đầu vào phải được thực hiện từng cái một. Khi một chữ số không khớp với mật khẩu tương ứng được nhập lần đầu tiên, chương trình phải hiển thị “xin lỗi mật khẩu sai” và cũng hiển thị số lần thử còn lại [ví dụ “5 lần thử còn lại”]. Nó cũng sẽ làm tương tự cho các lần nhập sai mật khẩu
Khi tất cả các lần thử đều thất bại, chương trình sẽ hiển thị “Đã kích hoạt báo động khẩn cấp” và kết thúc chương trình. Khi tất cả các mật khẩu được nhập chính xác, chương trình sẽ hiển thị “mở cửa an toàn” và kết thúc chương trình
Làm thế nào để bắt đầuTrước tiên, chúng tôi nhập hệ thống và chức năng thoát gốc do python xác định, đồng thời đọc các mô-đun hệ điều hành và biểu thức. Sau đó, chúng tôi xác định chức năng 'startMenu []'. Bên trong hàm ‘startMenu[]’, chúng ta khai báo các Biến toàn cục sẽ được sử dụng. Sau đó, chúng ta gọi hàm ‘clr[]’
Sau đó, chúng tôi phân loại giới hạn truy nguyên. Cuối cùng, chúng tôi in tiêu đề chương trình và thông tin về chương trình
Sau đó, chúng tôi xác định một vòng lặp mới. Sau đó, chúng tôi làm những việc dưới đây cho đến khi một ngoại lệ xảy ra. Sau đó, chúng tôi xác định lựa chọn chức năng đầu vào của người dùng, 1,2 hoặc 3. Nếu lựa chọn là 1,2 hoặc 3 thì chúng ta thoát khỏi vòng lặp. Nếu là số mà không phải là 1,2 hoặc 3 thì in ra “Vui lòng chỉ nhập số trên menu. ”
Nếu một chuỗi được nhập, chúng tôi in “Vui lòng chỉ nhập số trên menu. ”
Nếu người dùng nhập “2”, chúng tôi gọi hàm ‘clr[]’. Người dùng Nhập mã pin đăng nhập của họ [chức năng sẽ trả về]
Người dùng nhập userAttempts đăng nhập của họ [chức năng sẽ trả về]
Sau đó, chúng tôi gọi chức năng xuất dữ liệu
Nó mở một tập tin có tên là “mật khẩu. txt”, mã pin người dùng và các lần thử của người dùng được mã hóa và ghi vào tệp
Sau đó, tập tin được đóng lại. Chúng tôi hiển thị mã pin của người dùng và số lần thử của người dùng do người dùng chỉ định
Cuối cùng, người dùng được đưa trở lại menu chính
Nếu người dùng nhập “1”, chúng tôi gọi chức năng đọc dữ liệu
Sau đó, chúng tôi mở tệp có tên là mật khẩu mật khẩu. txt” và mã pin của người dùng được giải mã và đọc từ tệp
Chúng tôi gọi chức năng đăng nhập người dùng
Mỗi đầu vào phải được thực hiện từng cái một. Khi một chữ số không khớp với mật khẩu tương ứng được nhập lần đầu tiên, chương trình phải hiển thị “xin lỗi mật khẩu sai” và cũng hiển thị số lần thử còn lại [ví dụ “5 lần thử còn lại”]. Nó cũng sẽ làm tương tự cho các mục nhập sai mật khẩu sau đây. Khi tất cả các lần thử đều thất bại, chương trình sẽ hiển thị “Đã kích hoạt báo động khẩn cấp” và kết thúc chương trình
Khi tất cả các mật khẩu được nhập chính xác, chương trình sẽ hiển thị “mở cửa an toàn” và kết thúc chương trình
Nếu người dùng nhập 3, chúng ta xóa màn hình và kết thúc chương trình bằng cách thực hiện hàm endProgram[]
Toàn bộ mã của keySafe. kịch bản py được đưa ra dưới đây
Bạn có thể chạy ứng dụng này bằng cách thực thi đoạn mã sau trên thiết bị đầu cuối
Tôi hy vọng bài viết này đã giúp bạn bắt đầu với python bằng cách xây dựng ứng dụng An toàn điện tử với python. Giữ liên lạc để biết thêm bài viết. Cảm ơn bạn
Hàm eval[]
trong Python cho phép bạn thực thi mã Python ngẫu nhiên từ một chuỗi. Nó có thể thực sự thuận tiện khi bạn cần thực thi mã tùy ý đến từ đầu vào
Ví dụ: giả sử bạn có một biến bla
và muốn thực hiện một số thao tác trên biến đó. Sau đó, bạn có thể gọi đoạn mã sau [ở đây, chỉ cần in biến]
COPYbla = “hello”
eval[print[bla]]
Tại sao eval trong Python không an toàn và bảo mật?
eval[]
không an toàn vì bạn không bao giờ biết liệu mã bạn thực thi có đáng tin cậy hay không. Bạn có thể giới hạn phạm vi của các biến đang được truy cập với đối số thứ hai được chuyển đến eval[]
nhưng có nhiều trường hợp nội dung của lệnh có an toàn hay không
Hãy tưởng tượng rằng người dùng của bạn sử dụng một lệnh độc hại để thực thi mã để lấy danh sách người dùng trên hệ thống của bạn như bên dưới. Người dùng có thể lấy thông tin về hệ thống của bạn hoặc thậm chí tệ hơn là xóa thông tin khỏi hệ thống của bạn [chẳng hạn như dữ liệu, nhật ký, v.v.]
COPYcmd = "print[open[\"/etc/passwd\"].readlines[]]"
eval[cmd]
Và ngay cả khi bạn cố gắng giảm thiểu sự cố [ví dụ: bằng cách xóa người dùng khỏi các biến toàn cục], đầu vào của người dùng không thể tin cậy được. Xem bài đăng trên blog này để hiểu sâu hơn. Ngay cả những ghi chú về các vấn đề bảo mật với eval[]
Sử dụng literal_eval[]
để có mã Python an toàn và bảo mật
Giải pháp thay thế an toàn và bảo mật là sử dụng literal_eval[]
từ gói ast. literal_eval[]
không cho phép bạn chạy mã từ mô-đun khác, nó chỉ xử lý kiểu dữ liệu Python [e. g. nếu bạn cần thao tác dữ liệu, không gọi bất kỳ chức năng nào khác]. Bạn có thể đọc thêm về các hạn chế của literal_eval[]
trong tài liệu của nó. Lợi ích chính từ việc sử dụng literal_eval[]
là bất kỳ nỗ lực nào từ nguồn không đáng tin cậy để thực thi mã độc hại sẽ thất bại và gây ra ngoại lệ ValueError. Nói cách khác, cuộc gọi literal_eval[]
với mã độc sẽ không thành công và đưa ra một ngoại lệ mà các nhà phát triển cần xử lý
Nhược điểm của việc sử dụng literal_eval[]
là bạn không thể thực hiện các chức năng khác dựa trên bất kỳ đầu vào nào. Trong những trường hợp như vậy, bạn cần tự thực hiện hành vi và không bao giờ dựa vào việc gọi hàm eval[]
Tự động phát hiện việc sử dụng eval[]
không an toàn hoặc không an toàn
Với plugin Codiga, bạn có thể tự động phát hiện mã Python an toàn hoặc không an toàn. Nó tích hợp trong IDE cũng như đường dẫn CI/CD của bạn, nhờ vào tất cả các tích hợp của chúng tôi. Bạn thậm chí có thể thử quy tắc để tránh sử dụng eval[]
không an toàn bên dưới
Kiểm tra quy tắc để tránh eval[] và sử dụng literal_eval[]
Để sử dụng quy tắc này một cách nhất quán, tất cả những gì bạn cần làm là cài đặt tích hợp trong IDE [đối với Mã VS hoặc JetBrains] hoặc hệ thống quản lý mã và thêm tệp
COPYcmd = "print[open[\"/etc/passwd\"].readlines[]]"
eval[cmd]
8 vào thư mục gốc của hồ sơ của bạn với nội dung sauCOPYrulesets:
- python-security
Sau đó, nó sẽ kiểm tra tất cả mã Python của bạn dựa trên hơn 100 quy tắc phát hiện mã không an toàn và không an toàn, đồng thời đề xuất các bản sửa lỗi cho từng quy tắc đó