Sözleşme fonksiyonlarının görünürlük ayarları, kritik kısımları kazara erişim veya manipülasyondan korumak için çok önemlidir. 2020 Haziran'da Bancor Network borsasında yaşanan güvenlik olayı örneğinde olduğu gibi, kritik transfer fonksiyonunun yanlışlıkla public olarak ayarlanması, kullanıcı varlıklarını riske atmıştır.
Rust akıllı sözleşmelerinde, fonksiyon görünürlüğü başlıca aşağıdaki gibidir:
pub fn: public fonksiyonu, sözleşme dışından çağrılabilir
fn: Sadece sözleşme içinde çağrılabilir
pub(crate) fn: crate içinde çağrılmasını kısıtla
Başka bir internal yöntem ayarlama yolu, bağımsız bir impl Contract kod bloğu tanımlamak ve #[near_bindgen] dekoratörünü kullanmamaktır.
Geri çağırma işlevleri için, public olarak ayarlanmalı ancak yalnızca sözleşmenin kendisi tarafından çağrılmasını sağlamalıdır. Bu işlevselliği #[private] makrosu ile gerçekleştirebilirsiniz.
Rust'ta varsayılan olarak tüm içeriklerin private olduğunu, yalnızca pub Trait ve pub Enum içindeki öğelerin kamuya açık olduğunu unutmayın.
2. Ayrıcalıklı fonksiyonların erişim kontrolü
Fonksiyon görünürlüğü dışında, anlam katmanında tam bir erişim kontrol beyaz liste mekanizması oluşturulması gerekmektedir. Solidity'deki "onlyOwner" fonksiyonu gibi, bazı kritik fonksiyonlar yalnızca sözleşme sahibinin çağırabileceği fonksiyonlardır.
Rust akıllı sözleşmelerinde, benzer bir özel Trait uygulanabilir:
Bu, ayrıcalıklı işlevlerin erişim kontrolünü sağlamayı mümkün kılarak, yalnızca sözleşme sahibinin çağrı yapabilmesini garanti eder. Bu ilkeye dayanarak, daha karmaşık çoklu kullanıcı beyaz listeleri veya birden fazla beyaz liste ayarlanarak, hassas grup erişim kontrolü sağlanabilir.
3. Diğer Erişim Kontrol Yöntemleri
Başka bazı erişim kontrol yöntemleri, örneğin:
Sözleşme çağrısı zaman kontrolü
Akıllı sözleşmeler fonksiyonlarının çoklu imza çağrı mekanizması
Yönetim(DAO)'in gerçekleştirilmesi
Bu içerikler sonraki akıllı sözleşmeler geliştirme günlüğünde tanıtılacaktır.
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.
17 Likes
Reward
17
5
Repost
Share
Comment
0/400
TheMemefather
· 08-18 14:36
Ah bu Bancor olayı da çok absürt.
View OriginalReply0
PancakeFlippa
· 08-18 11:42
Bancor'u oynadın mı? Rekt...
View OriginalReply0
ReverseFOMOguy
· 08-16 02:20
bancor'un hatası gerçekten dayanılmaz.
View OriginalReply0
BoredApeResistance
· 08-16 02:05
Ah, bu Bancor'un bir zamanlar başına gelen o hata değil mi?
View OriginalReply0
rekt_but_not_broke
· 08-16 02:01
Saldırı örnekleri oldukça yeni, beni soğuk terler döktürdü.
Rust akıllı sözleşmeler güvenliği: Yetki kontrolü ve fonksiyon görünürlüğü ayrıntılı açıklaması
Rust akıllı sözleşmeler yetiştirme günlükleri (7) Sözleşme güvenliği ve yetki kontrolü
Bu makale, Rust akıllı sözleşmelerindeki yetki kontrolünü iki açıdan tanıtacaktır:
1. Sözleşme fonksiyonu görünürlüğü
Sözleşme fonksiyonlarının görünürlük ayarları, kritik kısımları kazara erişim veya manipülasyondan korumak için çok önemlidir. 2020 Haziran'da Bancor Network borsasında yaşanan güvenlik olayı örneğinde olduğu gibi, kritik transfer fonksiyonunun yanlışlıkla public olarak ayarlanması, kullanıcı varlıklarını riske atmıştır.
Rust akıllı sözleşmelerinde, fonksiyon görünürlüğü başlıca aşağıdaki gibidir:
Başka bir internal yöntem ayarlama yolu, bağımsız bir impl Contract kod bloğu tanımlamak ve #[near_bindgen] dekoratörünü kullanmamaktır.
Geri çağırma işlevleri için, public olarak ayarlanmalı ancak yalnızca sözleşmenin kendisi tarafından çağrılmasını sağlamalıdır. Bu işlevselliği #[private] makrosu ile gerçekleştirebilirsiniz.
Rust'ta varsayılan olarak tüm içeriklerin private olduğunu, yalnızca pub Trait ve pub Enum içindeki öğelerin kamuya açık olduğunu unutmayın.
2. Ayrıcalıklı fonksiyonların erişim kontrolü
Fonksiyon görünürlüğü dışında, anlam katmanında tam bir erişim kontrol beyaz liste mekanizması oluşturulması gerekmektedir. Solidity'deki "onlyOwner" fonksiyonu gibi, bazı kritik fonksiyonlar yalnızca sözleşme sahibinin çağırabileceği fonksiyonlardır.
Rust akıllı sözleşmelerinde, benzer bir özel Trait uygulanabilir:
pas pub trait Sahiplenebilir { fn assert_owner(&self) { assert_eq!(env::predecessor_account_id(), self.get_owner()); } AccountId; fn set_owner(&mut self, owner: AccountId); }
Bu, ayrıcalıklı işlevlerin erişim kontrolünü sağlamayı mümkün kılarak, yalnızca sözleşme sahibinin çağrı yapabilmesini garanti eder. Bu ilkeye dayanarak, daha karmaşık çoklu kullanıcı beyaz listeleri veya birden fazla beyaz liste ayarlanarak, hassas grup erişim kontrolü sağlanabilir.
3. Diğer Erişim Kontrol Yöntemleri
Başka bazı erişim kontrol yöntemleri, örneğin:
Bu içerikler sonraki akıllı sözleşmeler geliştirme günlüğünde tanıtılacaktır.