Date: 2026-05-21 Scope: All non-vendor PHP source files
Severity: High Locations: HtmlForm.php:265, 269, 1098, 1118
The submitURL and url are derived from ‘$_SERVER['REQUEST_URI’] without any validation. If successURL is set to a user-controlled value, it could lead to SSRF attacks. The buildUrl() method constructs URLs using $this->url['host'] from a parse_url()` call on unvalidated input.
Severity: Medium Location: HtmlForm.php:985
The redirect() method performs an unvalidated redirect:
An attacker controlling the URL could redirect users to malicious sites.
Severity: Medium Location: HtmlForm.php:985
The redirect() function does not sanitize the URL before passing it to header(). An attacker could inject newlines to modify HTTP headers (e.g., setting cookies).
Severity: High Location: HtmlForm.php:78-83
The autoloader constructs a file path from the class name with minimal sanitization:
Improper use could allow path traversal via .. in class names.
Severity: Medium Location: HtmlDom.php:88
The loadHTML() method takes raw HTML input and passes it to DOMDocument::loadHTML() without sanitization:
If user-controlled HTML flows through here (e.g., via the Richtext element), it enables SSRF (via img src or other URL-bearing tags) and XSS.
Severity: Medium-High Location: Elements/File.php:148-155
The handleUploadedFiles() method uses move_uploaded_file() but has several weaknesses:
Severity: Low-Medium Location: HtmlForm.php:343-371
The session handling does not regenerate session IDs. The session cookie parameters are taken from session_get_cookie_params() which may not enforce samesite=strict.
Severity: Low Location: Element.php:325-335
The htmlDataAttributes() method could be a vector for CSP bypass if attacker-controlled data enters $this->dataAttr keys/values.
Severity: Medium Location: HtmlForm.php:781-827
The process() method uses $this->successURL (derived from ‘$_SERVER['REQUEST_URI’]) for redirects. If a developer sets successURL` to a user-controlled value, it enables open redirects.
Severity: Low-Medium Location: HtmlDom.php:124-220
The allowed tag list is hardcoded but overridable. The method strips disallowed tags but does not sanitize dangerous attributes like onclick, onerror, inline style with expression(), or javascript: URIs in allowed attributes like href.
Severity: Medium Location: uploadprogress.php
The uploadprogress.php file exposes APC upload progress data via JSON without any access control. It directly accesses ‘$_GET['APC_UPLOAD_PROGRESS’]` which interacts with APC's internal tracking.
Severity: Low Location: HtmlForm.php:1033
The clearOldSessions() static method operates on $_SESSION without any authentication check.