Rust akıllı sözleşmeler güvenliği: Yetki kontrolü kapsamlı kılavuzu

robot
Abstract generation in progress

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:

  • Sözleşme yöntemlerinin (fonksiyonların) erişilebilirliği/call erişimi
  • Ayrıcalıklı işlevlerin erişim kontrolü/sorumlulukların dağılımı

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:

  • 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:

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:

  • 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.

GET6.26%
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.
  • Reward
  • 6
  • Share
Comment
0/400
CompoundPersonalityvip
· 08-01 17:53
Yine yetkiyle zeka savaşına giriyoruz.
View OriginalReply0
MEVSupportGroupvip
· 08-01 17:52
Yetki hatası, çok zor durumda. Birlikte ısınmaya çalışıyoruz.
View OriginalReply0
MetaMaximalistvip
· 08-01 17:51
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
TokenomicsTherapistvip
· 08-01 17:50
Bancor meselesini hatırlamıyorum, o zamanlar kanama yaşanmıştı.
View OriginalReply0
TokenEconomistvip
· 08-01 17:37
bunu açıklayayım - erişim kontrolü sözleşme güvenliğinin gerçekten a, b, c'sidir smh
View OriginalReply0
Layer2Arbitrageurvip
· 08-01 17:33
lmao düzgün erişim kontrolü olmadan rust sözleşmeleri yazmayı hayal et... ngmi gerçekten
View OriginalReply0
Trade Crypto Anywhere Anytime
qrCode
Scan to download Gate app
Community
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)