Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
8cc71cf
refactor: Bump @babel/core from 7.28.6 to 7.29.0 (#10032)
dependabot[bot] Feb 5, 2026
e299107
fix: Default HTML pages for password reset, email verification not fo…
mtrezza Feb 6, 2026
a490979
chore(release): 9.2.1-alpha.1 [skip ci]
semantic-release-bot Feb 6, 2026
d3d6e9e
fix: AuthData validation incorrectly triggered on unchanged providers…
Copilot Feb 6, 2026
617de99
chore(release): 9.2.1-alpha.2 [skip ci]
semantic-release-bot Feb 6, 2026
ed98c15
feat: Add event information to `verifyUserEmails`, `preventLoginWithU…
coratgerl Feb 6, 2026
27b27a7
chore(release): 9.3.0-alpha.1 [skip ci]
semantic-release-bot Feb 6, 2026
c1f1800
refactor: Bump commander from 14.0.2 to 14.0.3 (#10039)
dependabot[bot] Feb 6, 2026
a4265bb
fix: Default HTML pages for password reset, email verification not fo…
mtrezza Feb 6, 2026
97de70a
chore(release): 9.3.0-alpha.2 [skip ci]
semantic-release-bot Feb 6, 2026
558e1a3
refactor: Bump @semantic-release/release-notes-generator from 14.0.3 …
dependabot[bot] Feb 6, 2026
9e07ca6
refactor: Bump prettier from 2.0.5 to 3.8.1 (#10042)
mtrezza Feb 7, 2026
4c9c948
feat: Add `Parse.File.url` validation with config `fileUpload.allowed…
mtrezza Feb 7, 2026
96b8c62
chore(release): 9.3.0-alpha.3 [skip ci]
semantic-release-bot Feb 7, 2026
d186471
refactor: Bump eslint-plugin-unused-imports from 4.3.0 to 4.4.1 (#10048)
dependabot[bot] Feb 9, 2026
87284a8
refactor: Bump express-rate-limit from 7.5.1 to 8.2.1 (#10046)
dependabot[bot] Feb 11, 2026
79f581b
refactor: Bump globals from 16.2.0 to 17.3.0 (#10049)
dependabot[bot] Feb 11, 2026
e64b52f
refactor: Bump @actions/core from 1.11.1 to 3.0.0 (#10047)
dependabot[bot] Feb 11, 2026
b6b6327
fix: Unlinking auth provider triggers auth data validation (#10045)
mtrezza Feb 12, 2026
5064494
chore(release): 9.3.0-alpha.4 [skip ci]
semantic-release-bot Feb 12, 2026
1af6c0d
refactor: Bump yaml from 2.8.0 to 2.8.2 (#10051)
dependabot[bot] Feb 12, 2026
44a5bb1
fix: `Parse.Query.select('authData')` for `_User` class doesn't retur…
mtrezza Feb 12, 2026
c7f57f7
chore(release): 9.3.0-alpha.5 [skip ci]
semantic-release-bot Feb 12, 2026
403d9a6
refactor: Bump qs from 6.14.1 to 6.14.2 (#10056)
dependabot[bot] Feb 12, 2026
58fac78
refactor: Bump @babel/plugin-transform-flow-strip-types from 7.26.5 t…
dependabot[bot] Feb 12, 2026
12e10e2
refactor: Bump typescript from 5.8.3 to 5.9.3 (#10053)
dependabot[bot] Feb 12, 2026
8cfc856
refactor: Bump pg-monitor from 3.0.0 to 3.1.0 (#10052)
dependabot[bot] Feb 12, 2026
4ef89d9
fix: Default ACL overwrites custom ACL on `Parse.Object` update (#10061)
YazanAlkhalil Feb 14, 2026
1ac6011
chore(release): 9.3.0-alpha.6 [skip ci]
semantic-release-bot Feb 14, 2026
8b5a14e
feat: Upgrade to parse 8.2.0, @parse/push-adapter 8.3.0 (#10066)
mtrezza Feb 20, 2026
c4c8f67
chore(release): 9.3.0-alpha.7 [skip ci]
semantic-release-bot Feb 20, 2026
1a2521d
fix: Incorrect dependency chain of `Parse` uses browser build instead…
mtrezza Feb 21, 2026
8a8006c
chore(release): 9.3.0-alpha.8 [skip ci]
semantic-release-bot Feb 21, 2026
f0feb48
feat: Add support for streaming file upload via `Buffer`, `Readable`,…
mtrezza Feb 21, 2026
c7df723
chore(release): 9.3.0-alpha.9 [skip ci]
semantic-release-bot Feb 21, 2026
66762cd
empty commit to trigger CI
github-actions[bot] Feb 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ A big _thank you_ 🙏 to our [sponsors](#sponsors) and [backers](#backers) who
- [Using Environment Variables](#using-environment-variables)
- [Available Adapters](#available-adapters)
- [Configuring File Adapters](#configuring-file-adapters)
- [Restricting File URL Domains](#restricting-file-url-domains)
- [Idempotency Enforcement](#idempotency-enforcement)
- [Localization](#localization)
- [Pages](#pages)
Expand Down Expand Up @@ -491,6 +492,33 @@ Parse Server allows developers to choose from several options when hosting files

`GridFSBucketAdapter` is used by default and requires no setup, but if you're interested in using Amazon S3, Google Cloud Storage, or local file storage, additional configuration information is available in the [Parse Server guide](http://docs.parseplatform.org/parse-server/guide/#configuring-file-adapters).

### Restricting File URL Domains

Parse objects can reference files by URL. To prevent [SSRF attacks](https://owasp.org/www-community/attacks/Server_Side_Request_Forgery) via crafted file URLs, you can restrict the allowed URL domains using the `fileUpload.allowedFileUrlDomains` option.

This protects against scenarios where an attacker provides a `Parse.File` with an arbitrary URL, for example as a Cloud Function parameter or in a field of type `Object` or `Array`. If Cloud Code or a client calls `getData()` on such a file, the Parse SDK makes an HTTP request to that URL, potentially leaking the server or client IP address and accessing internal services.

> [!NOTE]
> Fields of type `Parse.File` in the Parse schema are not affected by this attack, because Parse Server discards the URL on write and dynamically generates it on read based on the file adapter configuration.

```javascript
const parseServer = new ParseServer({
...otherOptions,
fileUpload: {
allowedFileUrlDomains: ['cdn.example.com', '*.example.com'],
},
});
```

| Parameter | Optional | Type | Default | Environment Variable |
|---|---|---|---|---|
| `fileUpload.allowedFileUrlDomains` | yes | `String[]` | `['*']` | `PARSE_SERVER_FILE_UPLOAD_ALLOWED_FILE_URL_DOMAINS` |

- `['*']` (default) allows file URLs with any domain.
- `['cdn.example.com']` allows only exact hostname matches.
- `['*.example.com']` allows any subdomain of `example.com`.
- `[]` blocks all file URLs; only files referenced by name are allowed.

## Idempotency Enforcement

**Caution, this is an experimental feature that may not be appropriate for production.**
Expand Down
3 changes: 2 additions & 1 deletion benchmark/performance.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
* Run with: npm run benchmark
*/

const core = require('@actions/core');
const Parse = require('parse/node');
const { performance } = require('node:perf_hooks');
const { MongoClient } = require('mongodb');
Expand All @@ -25,6 +24,7 @@ const LOG_ITERATIONS = false;
// Parse Server instance
let parseServer;
let mongoClient;
let core;

// Logging helpers
const logInfo = message => core.info(message);
Expand Down Expand Up @@ -529,6 +529,7 @@ async function benchmarkQueryWithIncludeNested(name) {
* Run all benchmarks
*/
async function runBenchmarks() {
core = await import('@actions/core');
logInfo('Starting Parse Server Performance Benchmarks...');

let server;
Expand Down
77 changes: 77 additions & 0 deletions changelogs/CHANGELOG_alpha.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,80 @@
# [9.3.0-alpha.9](https://github.com/parse-community/parse-server/compare/9.3.0-alpha.8...9.3.0-alpha.9) (2026-02-21)


### Features

* Add support for streaming file upload via `Buffer`, `Readable`, `ReadableStream` ([#10065](https://github.com/parse-community/parse-server/issues/10065)) ([f0feb48](https://github.com/parse-community/parse-server/commit/f0feb48d0fb697a161693721eadd09d740336283))

# [9.3.0-alpha.8](https://github.com/parse-community/parse-server/compare/9.3.0-alpha.7...9.3.0-alpha.8) (2026-02-21)


### Bug Fixes

* Incorrect dependency chain of `Parse` uses browser build instead of Node build ([#10067](https://github.com/parse-community/parse-server/issues/10067)) ([1a2521d](https://github.com/parse-community/parse-server/commit/1a2521d930b855845aa13fde700b2e8170ff65a1))

# [9.3.0-alpha.7](https://github.com/parse-community/parse-server/compare/9.3.0-alpha.6...9.3.0-alpha.7) (2026-02-20)


### Features

* Upgrade to parse 8.2.0, @parse/push-adapter 8.3.0 ([#10066](https://github.com/parse-community/parse-server/issues/10066)) ([8b5a14e](https://github.com/parse-community/parse-server/commit/8b5a14ecaf0b58b899651fb97d43e0e5d9be506d))

# [9.3.0-alpha.6](https://github.com/parse-community/parse-server/compare/9.3.0-alpha.5...9.3.0-alpha.6) (2026-02-14)


### Bug Fixes

* Default ACL overwrites custom ACL on `Parse.Object` update ([#10061](https://github.com/parse-community/parse-server/issues/10061)) ([4ef89d9](https://github.com/parse-community/parse-server/commit/4ef89d912c08bb24500a4d4142a3220f024a2d34))

# [9.3.0-alpha.5](https://github.com/parse-community/parse-server/compare/9.3.0-alpha.4...9.3.0-alpha.5) (2026-02-12)


### Bug Fixes

* `Parse.Query.select('authData')` for `_User` class doesn't return auth data ([#10055](https://github.com/parse-community/parse-server/issues/10055)) ([44a5bb1](https://github.com/parse-community/parse-server/commit/44a5bb105e11e6918e899e0f1427b0adb38d6d67))

# [9.3.0-alpha.4](https://github.com/parse-community/parse-server/compare/9.3.0-alpha.3...9.3.0-alpha.4) (2026-02-12)


### Bug Fixes

* Unlinking auth provider triggers auth data validation ([#10045](https://github.com/parse-community/parse-server/issues/10045)) ([b6b6327](https://github.com/parse-community/parse-server/commit/b6b632755263417c2a3c3a31381eedc516723740))

# [9.3.0-alpha.3](https://github.com/parse-community/parse-server/compare/9.3.0-alpha.2...9.3.0-alpha.3) (2026-02-07)


### Features

* Add `Parse.File.url` validation with config `fileUpload.allowedFileUrlDomains` against SSRF attacks ([#10044](https://github.com/parse-community/parse-server/issues/10044)) ([4c9c948](https://github.com/parse-community/parse-server/commit/4c9c9489f062bec6d751b23f4a68aea2a63936bd))

# [9.3.0-alpha.2](https://github.com/parse-community/parse-server/compare/9.3.0-alpha.1...9.3.0-alpha.2) (2026-02-06)


### Bug Fixes

* Default HTML pages for password reset, email verification not found ([#10041](https://github.com/parse-community/parse-server/issues/10041)) ([a4265bb](https://github.com/parse-community/parse-server/commit/a4265bb1241551b7147e8aee08c36e1f8ab09ba4))

# [9.3.0-alpha.1](https://github.com/parse-community/parse-server/compare/9.2.1-alpha.2...9.3.0-alpha.1) (2026-02-06)


### Features

* Add event information to `verifyUserEmails`, `preventLoginWithUnverifiedEmail` to identify invoking signup / login action and auth provider ([#9963](https://github.com/parse-community/parse-server/issues/9963)) ([ed98c15](https://github.com/parse-community/parse-server/commit/ed98c15f90f2fa6a66780941fd3705b805d6eb14))

## [9.2.1-alpha.2](https://github.com/parse-community/parse-server/compare/9.2.1-alpha.1...9.2.1-alpha.2) (2026-02-06)


### Bug Fixes

* AuthData validation incorrectly triggered on unchanged providers ([#10025](https://github.com/parse-community/parse-server/issues/10025)) ([d3d6e9e](https://github.com/parse-community/parse-server/commit/d3d6e9e22a212885690853cbbb84bb8c53da5646))

## [9.2.1-alpha.1](https://github.com/parse-community/parse-server/compare/9.2.0...9.2.1-alpha.1) (2026-02-06)


### Bug Fixes

* Default HTML pages for password reset, email verification not found ([#10034](https://github.com/parse-community/parse-server/issues/10034)) ([e299107](https://github.com/parse-community/parse-server/commit/e29910764daef3c03ed1b09eee19cedc3b12a86a))

# [9.2.0-alpha.5](https://github.com/parse-community/parse-server/compare/9.2.0-alpha.4...9.2.0-alpha.5) (2026-02-05)


Expand Down
2 changes: 1 addition & 1 deletion ci/CiVersionCheck.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
const core = require('@actions/core');
const semver = require('semver');
const yaml = require('yaml');
const fs = require('fs').promises;
Expand Down Expand Up @@ -220,6 +219,7 @@ class CiVersionCheck {
* Runs the check.
*/
async check() {
const core = await import('@actions/core');
/* eslint-disable no-console */
try {
console.log(`\nChecking ${this.packageName} versions in CI environments...`);
Expand Down
2 changes: 1 addition & 1 deletion ci/definitionsCheck.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
const fs = require('fs').promises;
const { exec } = require('child_process');
const core = require('@actions/core');
const util = require('util');
(async () => {
const core = await import('@actions/core');
const [currentDefinitions, currentDocs] = await Promise.all([
fs.readFile('./src/Options/Definitions.js', 'utf8'),
fs.readFile('./src/Options/docs.js', 'utf8'),
Expand Down
3 changes: 2 additions & 1 deletion ci/nodeEngineCheck.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
const core = require('@actions/core');
const semver = require('semver');
const fs = require('fs').promises;
const path = require('path');
let core;

/**
* This checks whether any package dependency requires a minimum node engine
Expand Down Expand Up @@ -137,6 +137,7 @@ class NodeEngineCheck {
}

async function check() {
core = await import('@actions/core');
// Define paths
const nodeModulesPath = path.join(__dirname, '../node_modules');
const packageJsonPath = path.join(__dirname, '../package.json');
Expand Down
Loading
Loading