Ngâm trong trăn
Gần đây khi chạy thử một vài thuật toán Deep Learning, đặc biệt là thuật toán cung cấp mã nguồn sử dụng thư viện Caffe, gặp một số vấn đề liên quan đến mô-đun Pickle trong Python. Show 1. Pickle – Chuyển đổi một đối tượng Python sang định dạng nhị phân và đảo ngược
2. Pickle – không an toànMặc định, nó sẽ nhập tất cả các mô-đun có trong dữ liệu từ tệp được tải lên. chia sẻ
Thích bài nàyThích Đang tải. Có liên quanPickle, là một phần của thư viện Python theo mặc định, là một mô-đun quan trọng bất kể khi nào bạn cần sự kiên cố giữa các phiên bản người dùng. Là một mô-đun, pickle cung cấp cho việc lưu các đối tượng Python giữa các tiến trình Cho dù bạn đang lập trình cho một nền tảng dữ liệu, trò chơi, diễn đàn hay một số ứng dụng khác phải lưu thông tin giữa các phiên bản, thì dưa chuột rất hữu ích để lưu số nhận định dạng và cài đặt. Mô-đun dưa hấu có thể lưu trữ những thứ như các loại dữ liệu như boolean, chuỗi và mảng byte, danh sách, từ điển, hàm và nhiều thứ khác Lưu ý. Khái niệm về tẩy cũng được gọi là tuần tự hóa, sắp xếp lại và làm phẳng. Tuy nhiên, các điểm luôn giống nhau — để lưu một đối tượng vào một tệp để truy xuất sau này. Pickling hoàn thành điều này bằng cách viết các đối tượng dưới dạng một chuỗi byte dài Mã ví dụ Pickle bằng PythonĐể viết một đối tượng vào một tệp, bạn sử dụng mã theo cú pháp sau đối tượng pickle nhập khẩu = Object() filehandler = open (tên tệp, 'w') pickle. dump (đối tượng, filehandler)Đây là một ví dụ trong thế giới thực sự trông như thế nào nhập khẩu pickle Nhập khẩu toán học object_pi = toán học. pi file_pi = open('tên_pi. obj', 'w') dưa chua. kết xuất (đối tượng_pi, tệp_pi)Đoạn mã này ghi nội dung của object_pi vào tệp tin handler file_pi , do đó nó được gắn với tệp filename_pi. obj trong thư mục thực thi Để khôi phục giá trị của đối tượng vào bộ nhớ, hãy tải đối tượng xuống từ tệp. Giả sử rằng dưa chưa được nhập để sử dụng, hãy bắt đầu bằng cách nhập nó importle filehandler = open (file name, 'r') object = pickle. tải (trình xử lý tệp)Mã sau khôi phục giá trị của pi nhập tệp_pi2 = mở ('tên tệp_pi. obj', 'r') object_pi2 = dưa chua. tải (tệp_pi2)Đối tượng sau đó đã sẵn sàng để sử dụng một lần nữa, lần này là object_pi2. Tất nhiên, bạn có thể tái sử dụng tên ban đầu, nếu bạn thích Ví dụ này sử dụng tên riêng biệt để xác định rõ ràng Những điều cần nhớ về PickleVui lòng ghi nhớ những điều này khi sử dụng mô-đun dưa chuột
mẹo. Cũng tìm hiểu cách sử dụng giá đỡ để lưu các đối tượng trong Python cho một phương pháp duy trì tính liên tục của các đối tượng khác Trong Python, bạn có thể sử dụng pickle để tuần tự hóa (giải tuần tự hóa) một cấu trúc đối tượng thành (từ) một luồng byte. Dưới đây là các phương pháp hay nhất để tẩy Python an toàn Bởi Ashutosh Agrawal, cố vấn cao cấp, và Arvind Balaji, cố vấn liên kết, Synopsys Pickle trong Python chủ yếu được sử dụng trong tuần tự hóa và giải tuần tự hóa cấu trúc đối tượng Python. Nói cách khác, đó là quá trình chuyển đổi một đối tượng Python thành luồng byte để lưu trữ nó trong tệp/cơ sở dữ liệu, duy trì trạng thái chương trình qua các phiên hoặc truyền dữ liệu qua mạng. Luồng byte được chọn có thể được sử dụng để tạo lại hệ thống phân cấp đối tượng ban đầu bằng cách bỏ chọn luồng. Toàn bộ quá trình này tương tự như tuần tự hóa đối tượng trong Java hoặc. Mạng lưới Khi một luồng byte không được chọn, trước tiên mô-đun pickle sẽ tạo một phiên bản của đối tượng ban đầu và sau đó điền vào phiên bản đó bằng dữ liệu chính xác. Để đạt được điều này, luồng byte chỉ chứa dữ liệu dành riêng cho thể hiện đối tượng ban đầu. Nhưng chỉ có dữ liệu thôi có thể không đủ. Để giải nén thành công đối tượng, luồng byte đã chọn chứa các hướng dẫn cho trình giải mã để tái tạo lại cấu trúc đối tượng ban đầu cùng với toán hạng lệnh, giúp điền vào cấu trúc đối tượng Theo tài liệu mô-đun dưa chua, các loại sau có thể được ngâm
Pickle cho phép các đối tượng khác nhau khai báo cách chúng nên được ngâm bằng phương thức __reduce__. Bất cứ khi nào một đối tượng được chọn, phương thức __reduce__ được xác định bởi nó sẽ được gọi. Phương thức này trả về một chuỗi, có thể đại diện cho tên của toàn cục Python hoặc một bộ mô tả cách tái tạo lại đối tượng này khi giải nén Nói chung, tuple bao gồm hai đối số
Thư viện pickle sẽ chọn riêng từng thành phần của bộ dữ liệu và sẽ gọi đối tượng có thể gọi được trên các đối số được cung cấp để xây dựng đối tượng mới trong quá trình giải nén Nguy hiểm khi ngâm trănVì không có cách hiệu quả nào để xác minh luồng pickle đang được giải nén, nên có thể cung cấp mã shell độc hại làm đầu vào, gây ra việc thực thi mã từ xa. Kịch bản tấn công phổ biến nhất dẫn đến điều này là tin tưởng vào dữ liệu pickle thô nhận được qua mạng. Nếu kết nối không được mã hóa, dưa nhận được cũng có thể đã được sửa đổi trên dây. Một kịch bản tấn công khác là khi kẻ tấn công có thể truy cập và sửa đổi các tệp pickle được lưu trữ từ bộ đệm, hệ thống tệp hoặc cơ sở dữ liệu Mã ví dụ sau thể hiện chữ ký và xác minh mật mã. Chữ ký mật mã, như đã đề cập ở trên, giúp phát hiện bất kỳ sự thay đổi nào của dữ liệu đã chọn. Khách hàng sử dụng HMAC để ký dữ liệu. Nó gửi giá trị thông báo cùng với dữ liệu được chọn đến máy chủ như hình bên dưới |