Security - Italian translation added
This commit is contained in:
parent
bb7b24ad2f
commit
7bd6469be2
@ -1,43 +1,36 @@
|
|||||||
---
|
---
|
||||||
title: Security
|
title: Sicurezza
|
||||||
layout: default
|
layout: default
|
||||||
root: ../..
|
root: ../..
|
||||||
idx: 8.3
|
idx: 8.3
|
||||||
---
|
---
|
||||||
|
|
||||||
## Introduction <!-- omit in toc -->
|
## Introduzione <!-- omit in toc -->
|
||||||
|
|
||||||
Security is very important in making sure that your mod doesn't cause the server
|
La sicurezza è molto importante per evitare che una mod permetta di far perdere il controllo del server al suo proprietario.
|
||||||
owner to lose data or control.
|
|
||||||
|
|
||||||
- [Core Concepts](#core-concepts)
|
- [Concetti fondamentali](#concetti-fondamentali)
|
||||||
- [Formspecs](#formspecs)
|
- [Formspec](#formspec)
|
||||||
- [Never Trust Submissions](#never-trust-submissions)
|
- [Non fidarsi mai dei campi dei formspec](#non-fidarsi-mai-dei-campi-dei-formspec)
|
||||||
- [Time of Check isn't Time of Use](#time-of-check-isnt-time-of-use)
|
- [Il momento per controllare non è il momento dell'uso (Time of Check is not Time of Use)](#il-momento-per-controllare-non-e-il-momento-delluso-time-of-check-is-not-time-of-use)
|
||||||
- [(Insecure) Environments](#insecure-environments)
|
- [Ambienti (non sicuri)](#ambienti-non-sicuri)
|
||||||
|
|
||||||
## Core Concepts
|
## Concetti fondamentali
|
||||||
|
|
||||||
The most important concept in security is to **never trust the user**.
|
Il concetto più importante quando si parla di sicurezza è **non fidarsi mai dell'utente**.
|
||||||
Anything the user submits should be treated as malicious.
|
Ogni cosa che l'utente può inviare al server deve essere trattata come malevola.
|
||||||
This means that you should always check that the information they
|
Questo significa che dovresti sempre controllare che le informazioni da loro immesse siano valide, che abbiano i privilegi necessari e che siano autorizzati a fare determinate azioni.
|
||||||
enter is valid, that the user has the correct permissions,
|
|
||||||
and that they are otherwise allowed to do that action
|
|
||||||
(ie: in range or an owner).
|
|
||||||
|
|
||||||
A malicious action isn't necessarily the modification or destruction of data,
|
Un'azione malevola non è necessariamente la modifica o la distruzione di dati, ma può essere anche l'accedere a dati sensibili, come gli hash delle password o i messaggi privati.
|
||||||
but can be accessing sensitive data, such as password hashes or
|
Questo è grave soprattutto se il server possiede informazioni sugli utenti come le loro e-mail o la loro età, che alcuni potrebbero richiedere per questioni di verifica.
|
||||||
private messages.
|
|
||||||
This is especially bad if the server stores information such as emails or ages,
|
|
||||||
which some may do for verification purposes.
|
|
||||||
|
|
||||||
## Formspecs
|
## Formspec
|
||||||
|
|
||||||
### Never Trust Submissions
|
### Non fidarsi mai dei campi dei formspec
|
||||||
|
|
||||||
Any users can submit almost any formspec with any values at any time.
|
Qualsiasi utente può inviare qualsiasi formspec con i valori che preferisce quando preferisce.
|
||||||
|
|
||||||
Here's some real code found in a mod:
|
Segue del codice trovato realmente in una mod:
|
||||||
|
|
||||||
```lua
|
```lua
|
||||||
minetest.register_on_player_receive_fields(function(player,
|
minetest.register_on_player_receive_fields(function(player,
|
||||||
@ -54,57 +47,47 @@ minetest.register_on_player_receive_fields(function(player,
|
|||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
Can you spot the problem? A malicious user could submit a formspec containing
|
Riesci a vedere il problema? Un utente malintenzionato potrebbe inviare un formspec contenente la propria posizione, permettendogli di venire teletrasportato dovunque vuole.
|
||||||
their own position values, allowing them to teleport to anywhere they wish to.
|
Addirittura il tutto potrebbe essere automatizzato usando modifiche del client per replicare il comportamento di `/teleport` senza aver bisogno di alcun privilegio.
|
||||||
This could even be automated using client modifications to essentially replicate
|
|
||||||
the `/teleport` command with no need for a privilege.
|
|
||||||
|
|
||||||
The solution for this kind of issue is to use a
|
La soluzione per questo tipo di problematica è usare un [Contesto](../players/formspecs.html#contexts), come mostrato precedentemente nel capitolo dei Formspec.
|
||||||
[Context](../players/formspecs.html#contexts), as shown previously in
|
|
||||||
the Formspecs chapter.
|
|
||||||
|
|
||||||
### Time of Check isn't Time of Use
|
### Il momento per controllare non è il momento dell'uso (Time of Check is not Time of Use)
|
||||||
|
|
||||||
Any users can submit any formspec with any values at any time, except where the
|
Qualsiasi utente può inviare qualsiasi formspec con i valori che preferisce quando preferisce, sì: a meno che il motore di gioco non glielo impedisca:
|
||||||
engine forbids it:
|
|
||||||
|
|
||||||
* A node formspec submission will be blocked if the user is too far away.
|
* L'invio dei formspec di un nodo vengono bloccati se l'utente è troppo distante;
|
||||||
* From 5.0 onward, named formspecs will be blocked if they haven't been shown yet.
|
* Dalla 5.0 in poi, i formspec con un nome sono bloccati se non sono stati ancora mostrati.
|
||||||
|
|
||||||
This means that you should check in the handler that the user meets the
|
Questo significa che dovresti controllare che l'utente soddisfi i requisiti per visualizzare il formspec in primis, esattamente come per ogni azione corrispondente.
|
||||||
conditions for showing the formspec in the first place, as well as any
|
|
||||||
corresponding actions.
|
|
||||||
|
|
||||||
The vulnerability caused by checking for permissions in the show formspec but not
|
La vulnerabilità causata dal controllare i privilegi nel `show_formspec` ma non nella gestione del formspec in primis è chiamata *Time Of Check is not Time Of Use* (Il momento per controllare non è il momento dell'uso), o più brevemente TOCTOU.
|
||||||
in the handle formspec is called Time Of Check is not Time Of Use (TOCTOU).
|
|
||||||
|
|
||||||
|
|
||||||
## (Insecure) Environments
|
## Ambienti (non sicuri)
|
||||||
|
|
||||||
Minetest allows mods to request an unsandboxed environment, giving them access
|
Minetest permette alle mod di richiedere ambienti senza limiti, dando loro accesso all'intera API Lua.
|
||||||
to the full Lua API.
|
|
||||||
|
|
||||||
Can you spot the vulnerability in the following?
|
Riesci a individuare la vulnerabilità in questo pezzo di codice??
|
||||||
|
|
||||||
```lua
|
```lua
|
||||||
local ie = minetest.request_insecure_environment()
|
local ie = minetest.request_insecure_environment()
|
||||||
ie.os.execute(("path/to/prog %d"):format(3))
|
ie.os.execute(("path/to/prog %d"):format(3))
|
||||||
```
|
```
|
||||||
|
|
||||||
`string.format` is a function in the global shared table `string`.
|
`string.format` è una funzione nella tabella globale condivisa `string`.
|
||||||
A malicious mod could override this function and pass stuff to os.execute:
|
Una mod malevola potrebbe sovrascrivere questa funzione e passare "cose" a `os.execute`:
|
||||||
|
|
||||||
```lua
|
```lua
|
||||||
string.format = function()
|
string.format = function()
|
||||||
return "xdg-open 'http://example.com'"
|
return "xdg-open 'http://esempio.com'"
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
The mod could pass something much more malicious than opening a website, such
|
La mod potrebbe passare qualcosa di molto più malevolo dell'apertura di un sito, come dare il controllo remoto della macchina al malintenzionato in questione.
|
||||||
as giving a remote user control over the machine.
|
|
||||||
|
|
||||||
Some rules for using an insecure environment:
|
Alcune regole per usare un ambiente non sicuro:
|
||||||
|
|
||||||
* Always store it in a local and never pass it into a function.
|
* Tenerlo sempre in una variabile locale e non passarlo mai a una funzione;
|
||||||
* Make sure you can trust any input given to an insecure function, to avoid the
|
* Assicurarsi di potersi fidare di qualsiasi input eseguita in una funzione insicura, per evitare il problema sopracitato.
|
||||||
issue above. This means avoiding globally redefinable functions.
|
Questo significa evitare funzioni globali ridefinibili.
|
||||||
|
Loading…
Reference in New Issue
Block a user