Akıllı sözleşmeler yazarken, sözleşme işlevlerinin görünürlüğünü belirleyerek işlev çağrı yetkilerini kontrol edebilirsiniz. Bu, sözleşmedeki kritik bölümlerin kazara erişilmesini veya manipüle edilmesini önlemek için çok önemlidir.
Bancor Network borsasını örnek alırsak, 18 Haziran 2020'de sözleşme anahtar fonksiyon erişim kontrol izin ayarlarının hatalı olması nedeniyle bir güvenlik olayı meydana geldi. Bu sözleşme Solidity dili ile yazılmıştır ve fonksiyon görünürlüğü public/external ve private/internal olmak üzere ikiye ayrılmaktadır.
Bancor, güvenlik açığını düzeltirken, bazı kritik transfer fonksiyonlarını yanlışlıkla public özelliği olarak ayarladı ve bu da herhangi birinin sözleşmeden dışarıdan bu fonksiyonları çağırarak transfer işlemleri yapabilmesine neden oldu, bu da kullanıcıların 590.000 dolarlık varlıklarının ciddi bir riskle karşı karşıya kalmasına yol açtı.
Rust akıllı sözleşmelerinde, fonksiyon görünürlüğü kontrolü de aynı derecede önemlidir. NEAR SDK tarafından tanımlanan #[near_bindgen] makrosu ile süslenmiş sözleşme fonksiyonlarının aşağıdaki gibi görünürlük özellikleri vardır:
pub fn: kamu fonksiyonu, sözleşme arayüzünün bir parçasıdır ve sözleşmenin dışından çağrılabilir.
fn: Belirtilmemiş pub olan fonksiyonlar sadece sözleşme içinde çağrılabilir.
pub(crate) fn: crate içindeki alanla sınırlı çağrılar.
Başka bir yöntem, yöntemi internal olarak ayarlamak için #[near_bindgen] ile süslenmemiş impl Contract kod bloğunda tanımlamaktır.
Geri çağırma fonksiyonu, function call ile çağrılabilmesi için public bir özellik olarak ayarlanmalıdır. Aynı zamanda geri çağırma fonksiyonunun yalnızca sözleşmenin kendisi tarafından çağrılmasını sağlamak için #[private] makrosu kullanılabilir.
2. Ayrıcalıklı Fonksiyonların Erişim Kontrolü ( Beyaz Liste Mekanizması )
Fonksiyon görünürlüğünün yanı sıra, anlam katmanında tam bir erişim kontrol beyaz liste mekanizması oluşturulması gerekmektedir. Bazı ayrıcalıklı fonksiyonlar (örneğin, sözleşme başlatma, açma/durdurma, toplu transfer gibi) yalnızca sözleşme sahibi (owner) tarafından çağrılabilir.
Özelleştirilmiş Trait'ler oluşturarak ayrıcalıklı işlevlere erişimi kontrol edebilir, işlem çağrıcısının sözleşme sahibi olup olmadığını kontrol edebilirsiniz:
Bu ilkeye dayanarak, daha karmaşık bir trait özelleştirerek beyaz listede birden fazla kullanıcı veya birden fazla beyaz liste ayarlayarak hassas grup erişim kontrolü sağlanabilir.
3. Daha Fazla Erişim Kontrol Yöntemi
Diğer Rust akıllı sözleşmelerdeki erişim kontrol yöntemleri şunları içerir:
Sözleşmenin çağrılma zamanının kontrolü
Akıllı sözleşmelerin çoklu imza çağrı mekanizması
Yönetim(DAO)'in gerçekleştirilmesi
Bu içerikler, ilerleyen akıllı sözleşmeler geliştirme günlükleri serisinde detaylı bir şekilde ele alınacaktı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.
9 Likes
Reward
9
4
Share
Comment
0/400
not_your_keys
· 4h ago
bancor'un o açıklarından hala kurtulamadım.
View OriginalReply0
SigmaBrain
· 23h ago
Gerçekten Bancor'un çöküşü dersi derin izler bıraktı.
View OriginalReply0
NewPumpamentals
· 23h ago
Yine izin kontrolünden bahsediliyor, neden Bancor'un dersini öğrenmiyorsunuz?
Rust akıllı sözleşmeler yetki kontrolü: fonksiyon görünürlüğü ve ayrıcalıklı erişim yönetimi
Rust akıllı sözleşmeler yetiştirme günlüğü (7) Sözleşme güvenliği ve yetki kontrolü
Bu makale, Rust akıllı sözleşmelerindeki yetki kontrolü ile ilgili konuları iki açıdan tanıtacaktır:
1. Sözleşme fonksiyonu (metodu) görünürlüğü
Akıllı sözleşmeler yazarken, sözleşme işlevlerinin görünürlüğünü belirleyerek işlev çağrı yetkilerini kontrol edebilirsiniz. Bu, sözleşmedeki kritik bölümlerin kazara erişilmesini veya manipüle edilmesini önlemek için çok önemlidir.
Bancor Network borsasını örnek alırsak, 18 Haziran 2020'de sözleşme anahtar fonksiyon erişim kontrol izin ayarlarının hatalı olması nedeniyle bir güvenlik olayı meydana geldi. Bu sözleşme Solidity dili ile yazılmıştır ve fonksiyon görünürlüğü public/external ve private/internal olmak üzere ikiye ayrılmaktadır.
Bancor, güvenlik açığını düzeltirken, bazı kritik transfer fonksiyonlarını yanlışlıkla public özelliği olarak ayarladı ve bu da herhangi birinin sözleşmeden dışarıdan bu fonksiyonları çağırarak transfer işlemleri yapabilmesine neden oldu, bu da kullanıcıların 590.000 dolarlık varlıklarının ciddi bir riskle karşı karşıya kalmasına yol açtı.
Rust akıllı sözleşmelerinde, fonksiyon görünürlüğü kontrolü de aynı derecede önemlidir. NEAR SDK tarafından tanımlanan #[near_bindgen] makrosu ile süslenmiş sözleşme fonksiyonlarının aşağıdaki gibi görünürlük özellikleri vardır:
Başka bir yöntem, yöntemi internal olarak ayarlamak için #[near_bindgen] ile süslenmemiş impl Contract kod bloğunda tanımlamaktır.
Geri çağırma fonksiyonu, function call ile çağrılabilmesi için public bir özellik olarak ayarlanmalıdır. Aynı zamanda geri çağırma fonksiyonunun yalnızca sözleşmenin kendisi tarafından çağrılmasını sağlamak için #[private] makrosu kullanılabilir.
2. Ayrıcalıklı Fonksiyonların Erişim Kontrolü ( Beyaz Liste Mekanizması )
Fonksiyon görünürlüğünün yanı sıra, anlam katmanında tam bir erişim kontrol beyaz liste mekanizması oluşturulması gerekmektedir. Bazı ayrıcalıklı fonksiyonlar (örneğin, sözleşme başlatma, açma/durdurma, toplu transfer gibi) yalnızca sözleşme sahibi (owner) tarafından çağrılabilir.
Özelleştirilmiş Trait'ler oluşturarak ayrıcalıklı işlevlere erişimi kontrol edebilir, işlem çağrıcısının sözleşme sahibi olup olmadığını kontrol edebilirsiniz:
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 ilkeye dayanarak, daha karmaşık bir trait özelleştirerek beyaz listede birden fazla kullanıcı veya birden fazla beyaz liste ayarlayarak hassas grup erişim kontrolü sağlanabilir.
3. Daha Fazla Erişim Kontrol Yöntemi
Diğer Rust akıllı sözleşmelerdeki erişim kontrol yöntemleri şunları içerir:
Bu içerikler, ilerleyen akıllı sözleşmeler geliştirme günlükleri serisinde detaylı bir şekilde ele alınacaktır.