Nhật ký phát triển hợp đồng thông minh Rust (7) An toàn hợp đồng và kiểm soát truy cập
Bài viết này sẽ giới thiệu về kiểm soát quyền trong hợp đồng thông minh Rust từ hai góc độ:
Độ khả dụng của phương thức (hàm) hợp đồng được truy cập/triệu gọi
Kiểm soát truy cập chức năng đặc quyền/phân chia quyền và trách nhiệm
1. Độ khả thi của hàm (phương thức) hợp đồng
Việc kiểm soát tính khả thi của các hàm hợp đồng là rất quan trọng để bảo vệ các phần quan trọng khỏi bị truy cập hoặc thao tác ngẫu nhiên. Lấy ví dụ về sự cố an ninh của sàn giao dịch Bancor Network vào ngày 18 tháng 6 năm 2020, sự cố này xảy ra do việc thiết lập quyền truy cập không đúng cho các hàm quan trọng trong hợp đồng.
Trong hợp đồng thông minh Rust, có các loại khả năng truy cập hàm sau:
pub fn: Biểu thị phương thức này là công khai, thuộc một phần của giao diện hợp đồng, có thể được gọi từ bên ngoài hợp đồng.
fn: Nếu không chỉ định rõ pub, thì có nghĩa là hàm này không thể được gọi trực tiếp từ bên ngoài hợp đồng, chỉ có thể được gọi bên trong hợp đồng.
pub(crate) fn: Giới hạn phương thức chỉ được gọi trong phạm vi của crate.
Một cách khác để đặt phương thức thành nội bộ là định nghĩa trong khối mã impl Contract không được trang trí bằng #[near_bindgen].
Đối với hàm callback, phải được đặt thành thuộc tính public, nhưng cần đảm bảo chỉ có thể được gọi bởi chính hợp đồng. Có thể sử dụng macro #[private] để thực hiện điều này.
2. Kiểm soát truy cập các hàm đặc quyền( cơ chế danh sách trắng)
Ngoài khả năng hiển thị của hàm, cần thiết lập một cơ chế danh sách trắng kiểm soát truy cập hoàn chỉnh từ góc độ ngữ nghĩa. Một số hàm đặc quyền ( như khởi tạo hợp đồng, bật/tạm dừng v.v. ) chỉ có thể được gọi bởi chủ sở hữu hợp đồng.
Có thể thực hiện Trait tùy chỉnh để kiểm soát truy cập, kiểm tra xem người gọi có phải là chủ hợp đồng hay không:
Trang này có thể chứa nội dung của bên thứ ba, được cung cấp chỉ nhằm mục đích thông tin (không phải là tuyên bố/bảo đảm) và không được coi là sự chứng thực cho quan điểm của Gate hoặc là lời khuyên về tài chính hoặc chuyên môn. Xem Tuyên bố từ chối trách nhiệm để biết chi tiết.
13 thích
Phần thưởng
13
2
Đăng lại
Chia sẻ
Bình luận
0/400
PumpBeforeRug
· 08-09 06:44
Việc Bancor gặp sự cố lần đó cũng do quyền không được thiết lập đúng cách phải không?
Xem bản gốcTrả lời0
OffchainOracle
· 08-09 06:32
Bancor sự cố này phải được đưa vào sách giáo khoa cảnh báo.
Rust hợp đồng thông minh an toàn: Hiểu sâu về kiểm soát truy cập và quản lý quyền
Nhật ký phát triển hợp đồng thông minh Rust (7) An toàn hợp đồng và kiểm soát truy cập
Bài viết này sẽ giới thiệu về kiểm soát quyền trong hợp đồng thông minh Rust từ hai góc độ:
1. Độ khả thi của hàm (phương thức) hợp đồng
Việc kiểm soát tính khả thi của các hàm hợp đồng là rất quan trọng để bảo vệ các phần quan trọng khỏi bị truy cập hoặc thao tác ngẫu nhiên. Lấy ví dụ về sự cố an ninh của sàn giao dịch Bancor Network vào ngày 18 tháng 6 năm 2020, sự cố này xảy ra do việc thiết lập quyền truy cập không đúng cho các hàm quan trọng trong hợp đồng.
Trong hợp đồng thông minh Rust, có các loại khả năng truy cập hàm sau:
Một cách khác để đặt phương thức thành nội bộ là định nghĩa trong khối mã impl Contract không được trang trí bằng #[near_bindgen].
Đối với hàm callback, phải được đặt thành thuộc tính public, nhưng cần đảm bảo chỉ có thể được gọi bởi chính hợp đồng. Có thể sử dụng macro #[private] để thực hiện điều này.
2. Kiểm soát truy cập các hàm đặc quyền( cơ chế danh sách trắng)
Ngoài khả năng hiển thị của hàm, cần thiết lập một cơ chế danh sách trắng kiểm soát truy cập hoàn chỉnh từ góc độ ngữ nghĩa. Một số hàm đặc quyền ( như khởi tạo hợp đồng, bật/tạm dừng v.v. ) chỉ có thể được gọi bởi chủ sở hữu hợp đồng.
Có thể thực hiện Trait tùy chỉnh để kiểm soát truy cập, kiểm tra xem người gọi có phải là chủ hợp đồng hay không:
rỉ sét pub trait Ownable { fn assert_owner(&self) { assert_eq!(env::predecessor_account_id(), self.get_owner()); } fn get_owner(\u0026self) -\u003e AccountId; fn set_owner(&mut self, owner: AccountId); }
Dựa trên nguyên lý này, có thể thiết lập nhiều người dùng hoặc nhiều danh sách trắng, để thực hiện kiểm soát truy cập nhóm tinh vi hơn.
3. Nhiều phương pháp kiểm soát truy cập hơn
Các phương pháp kiểm soát truy cập khác trong hợp đồng thông minh Rust bao gồm:
Những nội dung này sẽ được giới thiệu chi tiết trong các bài viết sau.