Модель безопасности
Varion считает server и official backend authority. Client scripts, local files, launcher state и UI state не являются trusted source для gameplay или production identity decisions.
Server authority
Проверяйте на server или backend:
- inventory и economy changes
- permissions и admin actions
- teleport-like movement
- health, damage и weapon actions
- entity creation и ownership (client не мутирует remote entities)
- resource manifests и file lists
- server identity и masterlist trust state
- cloud/early auth results
Transport encryption
Session traffic шифруется per-connection (src/network/CNetworkManager.cpp, src/crypto/):
- key agreement — ECDH на кривой P-256 (
BCRYPT_ECDH_P256_ALGORITHM), shared secret прогоняется через SHA-256 KDF в 256-bit session key; - payload — AES-256-GCM envelope (
PacketType::EncryptedEnvelope) на каждый packet; - anti-replay — к plaintext добавляется 8-byte big-endian sequence, который аутентифицируется GCM и проверяется по sliding replay window; уже виденные или out-of-window sequences отбрасываются.
Encryption включен по умолчанию (encryptTransport = true в include/varion.h). Когда он включен, а client прислал transport pubkey, session устанавливается; если encryptTransport задан, но encryption установить не удалось, peer отключается (transport encryption required). Client отказывается от cleartext вне LAN; localhost/dev может остаться cleartext, когда encryption выключен. Сам HandshakeAck идет cleartext — client активирует session только после его разбора.
Connection gating
HandleHandshake пропускает соединение через набор проверок ДО того, как оно помечается authenticated:
protocolVersionдолжен совпадать с serverPROTOCOL_VERSION;channel(branch) должен совпадать с server channel;gtaBuildдолжен равнятьсяSUPPORTED_GTA_BUILD;clientBuildдолжен быть не нижеminClientBuild(когда он задан);- если задан
serverPassword— client обязан прислать совпадающий SHA-256 hex (сравнение constant-time; сам пароль не передается, только digest); - если
useCloudAuthиcloudAuthRequired— client обязан прислать непустые cloud id и token (проверка присутствия; полная backend-валидация — следующий шаг).
Только после всех проверок соединение становится authenticated и player admit-ится. Handshake — единственный packet, принимаемый до аутентификации.
Дополнительно каждый peer проходит через per-peer rate limit (windowed packet-count guard, kRatePacketCap): при повторном превышении cap peer отключается (rate limit exceeded).
Client integrity
Client anti-tamper (CAntiTamper) собран под compile-gate VARION_HARDENED, который по умолчанию OFF (client/CMakeLists.txt). В обычных сборках он скомпилирован в no-op — не рассчитывайте на client-side anti-cheat как на authority; source of truth остается на server.
Protected internals
Public server developers не должны редактировать protected client internals, launcher internals, private CDN config, signing keys или platform source trees, чтобы создать сервер. Их stable surface: server.toml, resources/, sdk/, include/ и documented HTTP/masterlist endpoints.
HTTP file safety
Resource file routes работают по allowlist: сервер отдает только файлы, заранее объявленные в manifest (после percent-decode запрос сверяется с advertised URL). Path traversal, absolute paths и unknown paths просто не совпадают ни с одним advertised-элементом и получают 404. Объявленные stream/data paths с сегментами .. или absolute/root отбрасываются еще на загрузке ресурса.
Client HTTP safety
Client varion.HttpClient validates URLs before fetch:
- protocol must be
httpилиhttps - default game port (
7788) blocked - host и port must match manifest HTTP base или asset-pack base
Local secrets
Runtime .gitignore и package filters защищают local-only files:
data/masterlist-token.txtdata/server-license.txt.envfiles (*.env,.env,.env.*)- logs, cache и local database files
Safe templates .env.example, .env.sample и .env.template разрешены.
Source backing
Страница основана на include/varion.h, src/network/CNetworkManager.cpp, src/crypto/, client/CMakeLists.txt, tools/verify-platform-trust.ps1, runtime .gitignore и sdk/client-js-runtime/injected/services-bootstrap.js.