Akıllı sözleşmeler yazarken, sözleşme fonksiyonlarının görünürlüğünü belirleyerek fonksiyon çağrım yetkilerini kontrol edebilir, sözleşmedeki kritik kısımların rastgele erişim veya manipülasyona karşı korunmasını sağlayabilirsiniz.
Bancor Network borsasını örnek alarak, 18 Haziran 2020 tarihinde bu borsada, sözleşme anahtar fonksiyon erişim kontrol yetkilerinin yanlış ayarlanması nedeniyle bir varlık güvenlik olayı meydana geldi. Bu sözleşme Solidity dili ile yazılmıştır, sözleşme fonksiyonlarının görünürlüğü public/external ve private/internal olmak üzere ikiye ayrılır. İlki, sözleşme fonksiyonlarının dış çağrıcılar tarafından çağrılmasına izin verir.
Bir güvenlik açığını düzeltirken, dikkatsizlik nedeniyle sözleşmedeki bazı kritik transfer fonksiyonları public özelliği olarak ayarlandı, bu da herkesin sözleşmenin dışından bu fonksiyonları çağırarak transfer işlemleri gerçekleştirmesine neden oldu ve kullanıcıların 590.000 dolarlık varlıkları ciddi bir riskle karşı karşıya kaldı.
Rust akıllı sözleşmelerinde, sözleşme fonksiyonlarının görünürlük kontrolüne de önem verilmelidir. NEAR SDK tarafından tanımlanan #[near_bindgen] makrosu ile süslenmiş Rust akıllı sözleşme fonksiyonlarının aşağıdaki gibi farklı görünürlük özellikleri vardır:
pub fn: Bu metodun public olduğunu, akıllı sözleşmeler arayüzünün bir parçası olduğunu ve sözleşme dışından çağrılabileceğini gösterir.
fn: Eğer pub açıkça belirtilmemişse, bu, sözleşmenin dışından doğrudan çağrılmasının mümkün olmadığı, yalnızca sözleşme içinde diğer işlevler tarafından çağrılabileceği anlamına gelir.
pub(crate) fn: crate( içindeki pub)'e eşdeğer, yöntemi crate'in iç alanında çağrılacak şekilde kısıtlar.
Diğer bir yöntem, sözleşim yöntemini internal olarak ayarlamak için sözleşme içinde bağımsız bir impl Contract kod bloğu tanımlamaktır; bu uygulama #[near_bindgen] ile süslenmemiştir.
(Callbacks) fonksiyonu için, tanımının public özelliği olarak ayarlanması gerekir, ancak yalnızca sözleşmenin kendisi tarafından çağrılabileceğinden emin olunmalıdır. NEAR SDK, bu işlevselliği sağlamak için #[private] makrosunu sunar.
Dikkat edilmesi gereken nokta, Rust dilinde varsayılan olarak tüm içeriklerin private olmasıdır, yalnızca pub Trait içindeki alt öğeler ve pub Enum içindeki Enum değişkenleri varsayılan olarak public'tır.
2. Ayrıcalıklı işlevlerin erişim kontrolü( beyaz liste mekanizması)
Fonksiyon görünürlüğü kontrolünün yanı sıra, sözleşme anlamsal düzeyinde tam bir erişim kontrolü beyaz liste mekanizması oluşturulmalıdır. Bazı ayrıcalıklı fonksiyonlar (, sözleşme başlangıcı, açma/durdurma, toplu transfer gibi ) sadece sözleşme sahibi ( owner ) tarafından çağrılabilir ve bu fonksiyonlar genellikle "sadece sahip" fonksiyonları olarak adlandırılır.
Bu anahtar işlevler public özellik olarak ayarlanmalı, ancak erişim kontrol kuralları tanımlanabilir; yalnızca ilgili kurallara uyanlar tam olarak yürütülebilir. Rust akıllı sözleşmelerinde, Solidity'deki onlyOwner modifier'ına benzer özel Trait'ler uygulanabilir:
Bu trait kullanılarak sözleşmedeki ayrıcalıklı fonksiyonlara erişim kontrolü sağlanabilir, çağrının sözleşme sahibi tarafından yapılması gerekmektedir. Bu ilkeye dayanarak, daha karmaşık modifier veya trait'ler özelleştirerek beyaz listede birden fazla kullanıcı ayarlamak veya birden fazla beyaz liste belirleyerek ince gruplama erişim kontrolü sağlamak mümkündür.
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şmeler fonksiyonlarının çoklu imza çağrı mekanizması
Yönetim(DAO)'in gerçekleştirilmesi
Bu içerikler, bu seri akıllı sözleşmeler gelişim günlüğü ile ilgili sonraki yazılarda 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.
10 Likes
Reward
10
6
Share
Comment
0/400
CompoundPersonality
· 12h ago
Yine yetkiyle zeka savaşına giriyoruz.
View OriginalReply0
MEVSupportGroup
· 12h ago
Yetki hatası, çok zor durumda. Birlikte ısınmaya çalışıyoruz.
View OriginalReply0
MetaMaximalist
· 12h ago
of, başka bir bancor seviyesinde acemi hatası... bu yüzden tüm protokol dağıtımları için resmi doğrulama gerektiğini düşünüyorum.
View OriginalReply0
TokenomicsTherapist
· 12h ago
Bancor meselesini hatırlamıyorum, o zamanlar kanama yaşanmıştı.
View OriginalReply0
TokenEconomist
· 12h ago
bunu açıklayayım - erişim kontrolü sözleşme güvenliğinin gerçekten a, b, c'sidir smh
View OriginalReply0
Layer2Arbitrageur
· 12h ago
lmao düzgün erişim kontrolü olmadan rust sözleşmeleri yazmayı hayal et... ngmi gerçekten
Rust akıllı sözleşmeler güvenliği: Yetki kontrolü kapsamlı kılavuzu
Rust akıllı sözleşmeler yetiştirme günlüğü (7) Sözleşme güvenliği için 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) erişilebilirliği
Akıllı sözleşmeler yazarken, sözleşme fonksiyonlarının görünürlüğünü belirleyerek fonksiyon çağrım yetkilerini kontrol edebilir, sözleşmedeki kritik kısımların rastgele erişim veya manipülasyona karşı korunmasını sağlayabilirsiniz.
Bancor Network borsasını örnek alarak, 18 Haziran 2020 tarihinde bu borsada, sözleşme anahtar fonksiyon erişim kontrol yetkilerinin yanlış ayarlanması nedeniyle bir varlık güvenlik olayı meydana geldi. Bu sözleşme Solidity dili ile yazılmıştır, sözleşme fonksiyonlarının görünürlüğü public/external ve private/internal olmak üzere ikiye ayrılır. İlki, sözleşme fonksiyonlarının dış çağrıcılar tarafından çağrılmasına izin verir.
Bir güvenlik açığını düzeltirken, dikkatsizlik nedeniyle sözleşmedeki bazı kritik transfer fonksiyonları public özelliği olarak ayarlandı, bu da herkesin sözleşmenin dışından bu fonksiyonları çağırarak transfer işlemleri gerçekleştirmesine neden oldu ve kullanıcıların 590.000 dolarlık varlıkları ciddi bir riskle karşı karşıya kaldı.
Rust akıllı sözleşmelerinde, sözleşme fonksiyonlarının görünürlük kontrolüne de önem verilmelidir. NEAR SDK tarafından tanımlanan #[near_bindgen] makrosu ile süslenmiş Rust akıllı sözleşme fonksiyonlarının aşağıdaki gibi farklı görünürlük özellikleri vardır:
Diğer bir yöntem, sözleşim yöntemini internal olarak ayarlamak için sözleşme içinde bağımsız bir impl Contract kod bloğu tanımlamaktır; bu uygulama #[near_bindgen] ile süslenmemiştir.
(Callbacks) fonksiyonu için, tanımının public özelliği olarak ayarlanması gerekir, ancak yalnızca sözleşmenin kendisi tarafından çağrılabileceğinden emin olunmalıdır. NEAR SDK, bu işlevselliği sağlamak için #[private] makrosunu sunar.
Dikkat edilmesi gereken nokta, Rust dilinde varsayılan olarak tüm içeriklerin private olmasıdır, yalnızca pub Trait içindeki alt öğeler ve pub Enum içindeki Enum değişkenleri varsayılan olarak public'tır.
2. Ayrıcalıklı işlevlerin erişim kontrolü( beyaz liste mekanizması)
Fonksiyon görünürlüğü kontrolünün yanı sıra, sözleşme anlamsal düzeyinde tam bir erişim kontrolü beyaz liste mekanizması oluşturulmalıdır. Bazı ayrıcalıklı fonksiyonlar (, sözleşme başlangıcı, açma/durdurma, toplu transfer gibi ) sadece sözleşme sahibi ( owner ) tarafından çağrılabilir ve bu fonksiyonlar genellikle "sadece sahip" fonksiyonları olarak adlandırılır.
Bu anahtar işlevler public özellik olarak ayarlanmalı, ancak erişim kontrol kuralları tanımlanabilir; yalnızca ilgili kurallara uyanlar tam olarak yürütülebilir. Rust akıllı sözleşmelerinde, Solidity'deki onlyOwner modifier'ına benzer özel Trait'ler 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 trait kullanılarak sözleşmedeki ayrıcalıklı fonksiyonlara erişim kontrolü sağlanabilir, çağrının sözleşme sahibi tarafından yapılması gerekmektedir. Bu ilkeye dayanarak, daha karmaşık modifier veya trait'ler özelleştirerek beyaz listede birden fazla kullanıcı ayarlamak veya birden fazla beyaz liste belirleyerek ince gruplama erişim kontrolü sağlamak mümkündür.
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, bu seri akıllı sözleşmeler gelişim günlüğü ile ilgili sonraki yazılarda tanıtılacaktır.