include::../description.adoc[]

include::../ask-yourself.adoc[]

include::../recommended.adoc[]

== Sensitive Code Example

Node.js https://nodejs.org/api/fs.html[``++fs++``]

----
const fs = require('fs');

fs.chmodSync("/tmp/fs", 0o777); // Sensitive
----

----
const fs = require('fs');
const fsPromises = fs.promises;

fsPromises.chmod("/tmp/fsPromises", 0o777); // Sensitive
----

----
const fs = require('fs');
const fsPromises = fs.promises

async function fileHandler() {
  let filehandle;
  try {
    filehandle = fsPromises.open('/tmp/fsPromises', 'r');
    filehandle.chmod(0o777); // Sensitive
  } finally {
    if (filehandle !== undefined)
      filehandle.close();
  }
}
----

Node.js https://nodejs.org/api/process.html#process_process_umask_mask[``++process.umask++``]

----
const process = require('process');

process.umask(0o000); // Sensitive
----

== Compliant Solution

Node.js https://nodejs.org/api/fs.html[``++fs++``]

[source,javascript]
----
const fs = require('fs');

fs.chmodSync("/tmp/fs", 0o770); // Compliant
----

[source,javascript]
----
const fs = require('fs');
const fsPromises = fs.promises;

fsPromises.chmod("/tmp/fsPromises", 0o770); // Compliant
----

[source,javascript]
----
const fs = require('fs');
const fsPromises = fs.promises

async function fileHandler() {
  let filehandle;
  try {
    filehandle = fsPromises.open('/tmp/fsPromises', 'r');
    filehandle.chmod(0o770); // Compliant
  } finally {
    if (filehandle !== undefined)
      filehandle.close();
  }
}
----

Node.js https://nodejs.org/api/process.html#process_process_umask_mask[``++process.umask++``]

[source,javascript]
----
const process = require('process');

process.umask(0o007); // Compliant
----

include::../see.adoc[]

ifdef::env-github,rspecator-view[]

'''
== Implementation Specification
(visible only on this page)

include::../message.adoc[]

'''
== Comments And Links
(visible only on this page)

include::../comments-and-links.adoc[]
endif::env-github,rspecator-view[]
