# Πολιτική ασφαλείας

Το ES4X σας επιτρέπει να εκτελείτε τις εφαρμογές σας σε ένα απόλυτο ασφαλές περιβάλλον δοκιμών. Οπως ακριβώς και το deno (opens new window), το ES4X μπορεί να απομονώσει την εφαρμογή. Η τεχνολογία πίσω από αυτό είναι το JVM security manager (opens new window). Τα security managers ήταν αυτό που απομόνωσε το παλιό Applet από την πρόσβαση στον κεντρικό υπολογιστή. Είναι πιο συντονισμένοι από αυτό που παίρνετε σήμερα με το deno.

# Δημιουργήστε μια πολιτική ασφαλείας

Για να δημιουργήσετε μια πολιτική ασφαλείας, εκτελέστε το es4x εργαλείο:

$ es4x security-policy

Creating a new 'security.policy' with full network access and
read-only IO access to the working directory.

Το δημιουργημένο αρχείο είναι ένα απλό πρότυπο, εάν το ανοίξετε μπορείτε να διαβάσετε:

// Grant the following permissions to code that shall be executed from
// the node_modules/.lib/* directory
grant codeBase "file:\${user.dir}\${/}node_modules\${/}.lib\${/}*" {
  // vert.x will need full access to the temp dir.
  permission java.io.FilePermission "\${java.io.tmpdir}\${/}-", "read,write,delete";

  // the code should be able to read the JVM/GraalVM runtime libs
  permission java.io.FilePermission "\${java.home}", "read";
  permission java.io.FilePermission "\${java.home}\${/}..\${/}release", "read";
  permission java.io.FilePermission "\${java.home}\${/}-", "read";

  // applications are allowed to read all files from the CWD
  permission java.io.FilePermission "\${user.dir}\${/}-", "read";
  // uncomment the following to allow full read access
  //permission java.io.FilePermission "<<ALL FILES>>", "read";

  // Netty performs some reflection we need to allow it
  permission java.lang.reflect.ReflectPermission "suppressAccessChecks";

  // By default we allow all runtime permissions
  // users may want to restrict this further say for example to
  // deny access to environment variables, etc...
  permission java.lang.RuntimePermission "*";

  // ES4X setup a nice looking logger
  permission java.util.logging.LoggingPermission "control";

  // Allow full access to JVM system properties
  permission java.util.PropertyPermission "*", "read,write";

  // currently we allow all access to the network
  permission java.net.SocketPermission "*", "accept,connect,listen,resolve";
};

Έτσι, αυτό το πρότυπο παρέχει πλήρη πρόσβαση στο δίκτυο και πρόσβαση μόνο για ανάγνωση σε όλα τα αρχεία από το CWD όπου η εφαρμογή ξεκίνησε.

TIP

Μόλις μάθετε όλα τα απαιτούμενα δικαιώματα για την εφαρμογή σας, μπορείτε να αρχίσετε να περιορίζετε ακόμη περισσότερο!

WARNING

Παρόλο που αυτό το πρότυπο μοιάζει με καλή αρχή, θυμηθείτε ότι το CWD είναι read only, για παράδειγμα, εάν εκτελείτε έναν διακομιστή http που κάνει μεταφορτώσεις αρχείων, εκτός αν οι μεταφορτώσεις προσγειώνονται στον $TEMP κατάλογο, θα αποτύχουν καθώς δεν υπάρχει τρόπος εγγραφής από την εφαρμογή.