Hạn Chế & Thực Hành Tốt Nhất

Các hạn chế bảo mật và thực hành tốt nhất để viết chính sách hiệu quả

Vì lý do bảo mật, các chính sách chạy trong môi trường bị hạn chế. Trang này ghi lại những gì không được phép và cung cấp các thực hành tốt nhất để viết chính sách hiệu quả.

Giới Hạn Chính Sách

Chính sách bị giới hạn 2.048 ký tự về độ dài. Điều này khuyến khích các quy tắc ngắn gọn, tập trung và đảm bảo thời gian đánh giá nhanh.


Hạn Chế Cấp Nền Tảng

Các phương thức RPC sau bị chặn ở cấp nền tảng và không thể được bật bởi bất kỳ chính sách nào:

CategoryMethods
Debug & Tracedebug_*, trace_*
Legacy Filterseth_newFilter, eth_newBlockFilter, eth_newPendingTransactionFilter, eth_getFilterChanges, eth_getFilterLogs, eth_uninstallFilter

Những hạn chế này áp dụng cho tất cả các yêu cầu bất kể tổ chức hoặc chính sách điểm cuối.


Hạn Chế eth_getLogs

Phương thức eth_getLogs bị hạn chế chỉ truy vấn một khối. Bạn phải chỉ định một trong:

  • block_hash: Truy vấn logs từ một hash khối cụ thể
  • block_number: Truy vấn logs từ một số khối cụ thể (định dạng hex như 0x100 hoặc các thẻ như latest)

Truy vấn phạm vi khối sử dụng fromBlocktoBlock không được hỗ trợ. Hạn chế này áp dụng cho cả yêu cầu RPC và MCP.


Từ Khóa Bị Chặn

Các mẫu sau không được phép trong chính sách:

PatternReason
import ...Cannot import external modules
package ...Cannot declare packages
default ...Cannot override default values
data.*Cannot reference external data

Các chính sách cố gắng sử dụng các mẫu này sẽ không vượt qua xác thực.


Hàm Tích Hợp Bị Vô Hiệu Hóa

Các danh mục tích hợp này bị vô hiệu hóa và sẽ bị từ chối:

PatternError Message
http.send"http.send is disabled"
crypto.*"Crypto functions are disabled"
io.jwt.*"JWT functions are disabled"
yaml.*"YAML functions are disabled"
uuid.*"UUID functions are disabled"
glob.*"Glob functions are disabled"
semver.*"Semver functions are disabled"
json.schema*"JSON schema functions are disabled"
graphql.*"GraphQL functions are disabled"
net.cidr*"Net CIDR functions are disabled"
opa.runtime*"OPA runtime functions are disabled"
rego.metadata*"Rego metadata functions are disabled"

Các chính sách sử dụng hàm tích hợp bị vô hiệu hóa sẽ không vượt qua xác thực với thông báo lỗi rõ ràng cho biết hàm nào không được phép.


Lỗi Xác Thực

Khi một chính sách không vượt qua xác thực, bạn sẽ nhận được các lỗi như:

ErrorCause
"Import statements are not allowed"Policy contains import
"Package declarations are not allowed"Policy contains package
"Default statements are not allowed"Policy contains default
"Data references are not allowed"Policy contains data.

Khi biên dịch thất bại do cú pháp Rego không hợp lệ, bạn sẽ nhận được số dòng và thông báo lỗi từ trình biên dịch.


Thực Hành Tốt Nhất

Địa Chỉ Chữ Thường

Luôn sử dụng lower() để khớp địa chỉ không phân biệt chữ hoa chữ thường:

# Good: Normalized comparison
deny if {
    lower(input.to_address) == "0xdead..."
}
 
# Bad: May miss matches due to case differences
deny if {
    input.to_address == "0xDead..."
}

Xử Lý Trường Nullable

Một số trường đầu vào có thể là null. Xử lý điều này một cách cẩn thận:

# Good: Check for null before comparison
deny if {
    input.usd_value != null
    input.usd_value > 10000
}
 
# Alternative: Use type checking
deny if {
    is_number(input.usd_value)
    input.usd_value > 10000
}

Kiểm Tra Kỹ Lưỡng

Trước khi triển khai chính sách vào sản xuất:

  1. Kiểm tra với nhiều tổ hợp đầu vào khác nhau
  2. Xác minh cả trường hợp cho phép và từ chối
  3. Kiểm tra các trường hợp biên (giá trị null, mảng rỗng)
  4. Xác thực với dữ liệu giao dịch thực tế

Tài Liệu Hóa Quy Tắc Của Bạn

Sử dụng chú thích để giải thích logic phức tạp:

# Block high-value transactions during off-hours
# Business hours are 9 AM - 5 PM UTC, Monday-Friday
deny if {
    [hour, _, _] := time.clock(time.now_ns())
    hour < 9
    input.usd_value > 1000
}

Sử Dụng Tên Biến Có Ý Nghĩa

Khi sử dụng biến cục bộ, chọn tên mô tả:

# Good: Clear variable names
deny if {
    high_risk_threshold := 10000
    input.usd_value > high_risk_threshold
}
 
# Avoid: Cryptic names
deny if {
    x := 10000
    input.usd_value > x
}
Hạn Chế & Thực Hành Tốt Nhất | 256 Blocks