mirror of
https://github.com/nodejs/node.git
synced 2026-10-28 10:15:07 +08:00
doc: clarify fileURLToPath security considerations
Add clarification that fileURLToPath() decodes encoded dot-segments (%2e%2e) which are normalized as path traversal. Applications must perform their own path validation to prevent directory traversal attacks. Also applies to fileURLToPathBuffer(). PR-URL: https://github.com/nodejs/node/pull/60887 Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
This commit is contained in:
1 parent
94cd600542
commit
6f7f51b8f1
1 file changed
+23
@@ -1329,6 +1329,19 @@ changes:
|
||||
This function ensures the correct decodings of percent-encoded characters as
|
||||
well as ensuring a cross-platform valid absolute path string.
|
||||
|
||||
**Security Considerations:**
|
||||
|
||||
This function decodes percent-encoded characters, including encoded dot-segments
|
||||
(`%2e` as `.` and `%2e%2e` as `..`), and then normalizes the resulting path.
|
||||
This means that encoded directory traversal sequences (such as `%2e%2e`) are
|
||||
decoded and processed as actual path traversal, even though encoded slashes
|
||||
(`%2F`, `%5C`) are correctly rejected.
|
||||
|
||||
**Applications must not rely on `fileURLToPath()` alone to prevent directory
|
||||
traversal attacks.** Always perform explicit path validation and security checks
|
||||
on the returned path value to ensure it remains within expected boundaries
|
||||
before using it for file system operations.
|
||||
|
||||
```mjs
|
||||
import { fileURLToPath } from 'node:url';
|
||||
|
||||
@@ -1384,6 +1397,15 @@ representation of the path, a `Buffer` is returned. This conversion is
|
||||
helpful when the input URL contains percent-encoded segments that are
|
||||
not valid UTF-8 / Unicode sequences.
|
||||
|
||||
**Security Considerations:**
|
||||
|
||||
This function has the same security considerations as [`url.fileURLToPath()`][].
|
||||
It decodes percent-encoded characters, including encoded dot-segments
|
||||
(`%2e` as `.` and `%2e%2e` as `..`), and normalizes the path. **Applications
|
||||
must not rely on this function alone to prevent directory traversal attacks.**
|
||||
Always perform explicit path validation on the returned buffer value before
|
||||
using it for file system operations.
|
||||
|
||||
### `url.format(URL[, options])`
|
||||
|
||||
<!-- YAML
|
||||
@@ -2014,6 +2036,7 @@ console.log(myURL.origin);
|
||||
[`querystring`]: querystring.md
|
||||
[`url.domainToASCII()`]: #urldomaintoasciidomain
|
||||
[`url.domainToUnicode()`]: #urldomaintounicodedomain
|
||||
[`url.fileURLToPath()`]: #urlfileurltopathurl-options
|
||||
[`url.format()`]: #urlformaturlobject
|
||||
[`url.href`]: #urlhref
|
||||
[`url.parse()`]: #urlparseurlstring-parsequerystring-slashesdenotehost
|
||||
|
||||
Reference in new issue
Block a user