Akıllı sözleşmelerde işlev görünürlüğünü doğru bir şekilde ayarlamak, sözleşme güvenliğini korumak için son derece önemlidir. 18 Haziran 2020'de Bancor Network borsa platformunda meydana gelen güvenlik olayına örnek olarak, kritik transfer işlevinin yanlışlıkla public olarak ayarlanması, kullanıcı varlıklarını ciddi bir riskle karşı karşıya bırakmıştır.
Rust akıllı sözleşmelerinde, fonksiyon görünürlüğü başlıca şu şekildedir:
pub fn: public fonksiyonu, herkes sözleşmenin dışından çağırabilir
fn: varsayılan private, yalnızca sözleşme içinde çağrılabilir
pub(crate) fn: crate içinde çağrılmasını kısıtla
Ayrıca, #[near_bindgen] içermeyen bir impl bloğu tanımlayarak internal yöntemleri uygulayabilirsiniz.
Geri çağırma fonksiyonu için, public olarak ayarlanmalı ancak ek bir erişim kontrolü gereklidir:
pas
#[private]
pub fn resolve_transfer(&mut self) {
env::log_str("Bu bir geri çağırma");
}
2. Ayrıcalıklı Fonksiyon Erişim Kontrolü
Fonksiyon görünürlüğünün yanı sıra, tam bir erişim kontrol beyaz liste mekanizması da oluşturulması gerekmektedir. Solidity'deki onlyOwner modifier'ına benzer bir etkiyi sağlamak için Trait özelleştirilebilir:
Bu şekilde yalnızca owner'ın belirli ayrıcalık fonksiyonlarını çağırabilmesi kısıtlanabilir. Buna dayanarak daha karmaşık çoklu kullanıcı beyaz listeleri veya birden fazla beyaz liste ayarlanabilir, böylece ince grup erişim kontrolü sağlanabilir.
Rust akıllı sözleşmelerde ayrıca çağrı zaman kontrolü, çoklu imza mekanizması gibi diğer erişim kontrol yöntemleri de bulunmaktadır, bunlar sonraki makalelerde tanıtılacaktır.
View Original
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
Rust akıllı sözleşmeler güvenliği: Fonksiyon görünürlüğü ve erişim kontrolü uygulamaları
Rust akıllı sözleşmeler yetiştirme günlüğü (7) Sözleşme güvenliği ve hesaplama hassasiyeti
Bu makale, Rust akıllı sözleşmelerindeki yetki kontrolünü iki açıdan ele alacaktır:
1. Sözleşme fonksiyonu görünürlüğü
Akıllı sözleşmelerde işlev görünürlüğünü doğru bir şekilde ayarlamak, sözleşme güvenliğini korumak için son derece önemlidir. 18 Haziran 2020'de Bancor Network borsa platformunda meydana gelen güvenlik olayına örnek olarak, kritik transfer işlevinin yanlışlıkla public olarak ayarlanması, kullanıcı varlıklarını ciddi bir riskle karşı karşıya bırakmıştır.
Rust akıllı sözleşmelerinde, fonksiyon görünürlüğü başlıca şu şekildedir:
Ayrıca, #[near_bindgen] içermeyen bir impl bloğu tanımlayarak internal yöntemleri uygulayabilirsiniz.
Geri çağırma fonksiyonu için, public olarak ayarlanmalı ancak ek bir erişim kontrolü gereklidir:
pas #[private] pub fn resolve_transfer(&mut self) { env::log_str("Bu bir geri çağırma"); }
2. Ayrıcalıklı Fonksiyon Erişim Kontrolü
Fonksiyon görünürlüğünün yanı sıra, tam bir erişim kontrol beyaz liste mekanizması da oluşturulması gerekmektedir. Solidity'deki onlyOwner modifier'ına benzer bir etkiyi sağlamak için Trait özelleştirilebilir:
pas pub trait Sahiplenebilir { fn assert_owner(&self) { assert_eq!(env::predecessor_account_id(), self.get_owner()); } HesapId; fn set_owner(&mut self, owner: AccountId); }
Bu şekilde yalnızca owner'ın belirli ayrıcalık fonksiyonlarını çağırabilmesi kısıtlanabilir. Buna dayanarak daha karmaşık çoklu kullanıcı beyaz listeleri veya birden fazla beyaz liste ayarlanabilir, böylece ince grup erişim kontrolü sağlanabilir.
Rust akıllı sözleşmelerde ayrıca çağrı zaman kontrolü, çoklu imza mekanizması gibi diğer erişim kontrol yöntemleri de bulunmaktadır, bunlar sonraki makalelerde tanıtılacaktır.