Skip to content

PluginTransformationProtection

Armin Burgmeier edited this page Aug 9, 2014 · 1 revision

The transformation-protection plugin

This plugin is supposed to protect the server from DoS attacks by malicious clients, or from high server load induced by extremely lagging clients.

When a user makes a change to the text document, other participants must acknowledge that they have received this change. If another (malicious) user does not, and sends their own changes without ever acknowledging the change by the first user, the server will merge the state of the document before the change of the first user with the change from the malicious user. This process takes the more time the more changes have been made between the current document state and the first non-acknowledged change. In principle, such a situation can also happen with an extremely lagging client, who does not receive changes by other users for a long time, but keeps making own changes meanwhile.

At the moment, there is not much experience at what point a serious server load is being generated. It will also depend a lot on the kind of changes made by the participants. Single characters will be less intrusive than pasting lots of text in a single keystroke or complicated Undo/Redo computations.

The plugin allows to limit the number of changes between the last non-acknowledged change and the current document state. If a client makes a request that would exceed this limit, the request is discarded and the client is unsubscribed from the document.

Plugin options

  • max-vdiff: Maximum number of document changes between the last non-acknowledged change and the current document state. In typical situations, a value of 64 should not be exceeded in normal operation with a low number of actively writing users.

Example

[transformation-protection]
max-vdiff=64

Unsubscribes client connections when they ask for more than 64 transformations between the document state they made an operation in and the current state of the server.

Other Plugins

Back to the list of infinoted plugins.