Rust akıllı sözleşmeler güvenliği: Fonksiyon görünürlüğü ve yetki kontrolü için en iyi uygulamalar

robot
Abstract generation in progress

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 ele alacaktır:

  1. Sözleşme yöntemlerinin (fonksiyonların) erişim/görülebilirlik durumu
  2. Ayrıcalık fonksiyonlarının erişim kontrolü/sorumlulukların dağılımı

1. Sözleşme fonksiyonları (metotları) görünürlüğü

Akıllı sözleşmeler yazarken, sözleşme fonksiyonlarının görünürlüğünü belirleyerek fonksiyon çağrı yetkilerini kontrol edebilir, böylece sözleşmedeki kritik bölümlerin kazara erişilmesini veya manipüle edilmesini koruyabilirsiniz.

Bancor Network borsasını örnek alırsak, 18 Haziran 2020'de sözleşme anahtar fonksiyon erişim kontrol izinlerinin yanlış ayarlanmasından kaynaklanan bir güvenlik olayı meydana geldi. Bu sözleşme Solidity diliyle yazılmıştır ve 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 ve sözleşme arayüzünün bir parçası olarak görülebilir.

Bancor Network, belirli bir güvenlik açığını düzeltirken, sözleşmedeki bazı kritik transfer fonksiyonlarını public özelliği olarak ayarladı ve bu da herkesin sözleşmenin dışından bu fonksiyonları çağırarak transfer işlemleri yapabilmesine neden oldu. Bu açık, kullanıcıların 590.000 dolarlık varlıklarını ciddi bir riske maruz bıraktı.

Rust akıllı sözleşmelerinde, sözleşme fonksiyonlarının görünürlük kontrolüne de dikkat edilmelidir. NEAR SDK tarafından tanımlanan makro #[near_bindgen] Rust akıllı sözleşme fonksiyonlarını süslemek için kullanılabilir ve aşağıdaki farklı görünürlük özelliklerine sahiptir:

  • pub fn: Bu sözleşme yönteminin public olduğunu, sözleşme arayüzünün bir parçası olduğunu ve herkesin sözleşmenin dışından çağırabileceğini belirtir.
  • fn: Eğer pub açıkça belirtilmemişse, bu, sözleşmenin dışından bu işlevin doğrudan çağrılmasının mümkün olmadığı, yalnızca sözleşme içinde diğer işlevlerin içinden çağrılabileceği anlamına gelir.
  • pub(crate) fn: pub(in crate)'e karşılık gelir, fn gibi, akıllı sözleşmeler yöntemini crate içindeki alanla sınırlı bir şekilde çağırılmasını sağlar.

Diğer bir yöntem, sözleşme 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üslenmez.

Geri çağırma (Callbacks) fonksiyonunun tanımı public özelliği olarak ayarlanmalıdır, ancak aynı zamanda yalnızca sözleşmenin kendisi tarafından çağrılmasını sağlamalıdır. NEAR SDK, bu işlevselliği sağlamak için #[private] makrosunu sunar.

Dikkate değer olan, Rust dilinde varsayılan olarak tüm içeriğin 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'tir.

2. Ayrıcalık fonksiyonlarının erişim kontrolü (beyaz liste mekanizması)

Fonksiyon görünürlüğünün yanı sıra, sözleşme anlamı düzeyinde tam bir erişim kontrol beyaz liste mekanizması oluşturulması gerekmektedir. Sözleşme başlatma, açma/durma, toplu transfer gibi bazı ayrıcalıklı fonksiyonlar genellikle yalnızca sözleşme sahibi (owner) tarafından çağrılabilir.

Bu ayrıcalıklı fonksiyonlar, dışarıdan çağrılabilmesi için public (genel) özellik olarak ayarlanmalıdır, ancak aynı zamanda erişim kontrol kurallarının tanımlanması gerekir, böylece yalnızca koşulları karşılayan kullanıcılar tam olarak çalıştırabilir.

Rust akıllı sözleşmelerinde, özel fonksiyonlara erişim kontrolü sağlamak için özelleştirilmiş Trait ile Solidity'deki modifier işlevselliğine benzer bir özellik gerçekleştirilebilir:

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, işlem çağrıcısının sözleşmenin sahibi olması gerekmektedir. Bu prensibe dayanarak, birden fazla kullanıcı veya birden fazla beyaz liste ayarlamak için daha karmaşık modifier veya trait tanımlanarak ince gruplama erişim kontrolü sağlanabilir.

3. Daha Fazla Erişim Kontrol Yöntemi

Yukarıdaki yöntemlerin yanı sıra, Rust akıllı sözleşmelerinde sözleşme çağrısı zaman kontrolü, sözleşme fonksiyonlarının çoklu imza çağrı mekanizması, yönetim (DAO) uygulamaları gibi diğer erişim kontrol yöntemleri de bulunmaktadır. Bu içerikler, bu seri akıllı sözleşme gelişim günlüğünün sonraki makalelerinde ayrıntılı olarak ele alınacaktır.

BNT-0.17%
GET2.67%
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
  • 3
  • Share
Comment
0/400
Rugpull幸存者vip
· 12h ago
Bu sefer de izin listesi yeni eyewash değil mi?
View OriginalReply0
RektHuntervip
· 12h ago
rust Çaylak必看!靠谱~
View OriginalReply0
MetaLord420vip
· 12h ago
Merhaba, izin listesi de kara geçilebilir, değil mi~
View OriginalReply0
  • Pin
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)