validation

% Data Validation

Reviewed 2021-05-12 by japhb

NOTE: Validation is a WIP, though significantly improved in 0.1.2

Problem

As with any communicating processes, MUGS clients and servers have no intrinsic reason to trust each other or their communication channel. Thus both need to validate all received data for syntactic and semantic correctness before acting on them. Even in cases where data can be proven to be the right structure and type, we should assume that the actual data itself may have been manipulated to cause trouble. For example, strings may contain control characters or delimiters, sizes and durations may be negative or huge, multidimensional arrays may have ragged row sizes, and so forth.

Of course, there are important performance considerations. Copying all of the data as it is validated may ensure that the calling code never has access to the raw unvalidated data, but it also (at least) doubles the memory requirements for message processing and causes quite a bit of GC churn to boot. Clients may be processing a large volume of messages, and servers certainly will; excessive overhead will cause noticeable lag, or limit the maximum goodput available.

In designing the validation API, it's important that the "easy" or at least "obvious" path be the safe and correct path as well. This implies that validation shouldn't be so far away from consumption that the two codepaths will be very likely to skew or bitrot over time.

Levels

There are a few different levels of validation needed, for different parts of the codebase:

  • Core functionality that manages the communication channels and routes messages for further processing only needs to care that the basic message structure is correct and that the routing information is sufficiently validated to correctly route the messages.

  • Game servers and clients need to deeply validate the messages they receive (and possibly the ones they send, to reduce the likelihood of game engine bugs resulting in sending corrupted messages).

  • UI plugins should be able to assume that clients have done the core semantic validation, and can focus on ensuring the data has been defanged for safe display in that particular display (escaping HTML in strings, preventing writes outside the active viewport, etc.).

Standards

Expected standards for each of the communicating layers:

Server App

  • Server configuration makes sense

  • Universe configuration makes sense

  • Connection and authentication attempts are non-abusive

  • Overload is shed properly

Server Storage

  • Foreign key relationships hold

  • Storage-side semantic rules are checked and enforced

  • Identities are syntactically valid

  • Identities are universe-unique even after de-confusion

Server Session

  • Network messages can be parsed into MUGS::Message objects

  • Messages can be routed to proper game or global server task

  • No non-validated data is used in routing operations

Server Game

  • All consumed fields syntactically validated

  • All consumed fields semantically validated

  • All consumed fields statefully validated where appropriate

Client Session

  • Network messages can be parsed into MUGS::Message objects

  • Messages can be routed to proper game or lobby task

  • No non-validated data is used in routing operations

Client Game

  • All consumed fields syntactically validated

  • All consumed fields semantically validated

  • All transmitted fields semantically validated

UI App

  • All data defanged as appropriate for the UI type

UI Game

  • All data cleaned/canonified for safe display

MUGS v0.1.4

Multi-User Gaming Services - A Raku-based platform for game service development

Authors

  • Geoffrey Broadwell

License

Artistic-2.0

Dependencies

MUGS::Core:ver<0.1.4>MUGS::Games:ver<0.1.4>MUGS::UI::CLI:ver<0.1.4>MUGS::UI::TUI:ver<0.1.4>MUGS::UI::WebSimple:ver<0.1.4>

Test Dependencies

Provides

  • MUGS

The Camelia image is copyright 2009 by Larry Wall. "Raku" is trademark of the Yet Another Society. All rights reserved.

Built with Podlite — the markup and publishing tools behind this site.