Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5613710411 | ||
|
|
08f7ffccbc |
11
CHANGELOG.md
11
CHANGELOG.md
@@ -1,5 +1,16 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## Changes 11/16/2025 (v1.9.9)
|
||||||
|
|
||||||
|
release(v1.9.9): fix(branding): sanitize custom logo URL preview
|
||||||
|
|
||||||
|
- Sanitize branding.customLogoUrl on the server before writing siteConfig.json
|
||||||
|
- Allow only http/https or site-relative paths; strip invalid/sneaky values
|
||||||
|
- Update adminPanel.js live logo preview to set img src/alt safely
|
||||||
|
- Addresses CodeQL XSS warning while keeping Pro branding logo overrides working
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Changes 11/16/2025 (v1.9.8)
|
## Changes 11/16/2025 (v1.9.8)
|
||||||
|
|
||||||
release(v1.9.8): feat(pro): wire core to Pro licensing + branding hooks
|
release(v1.9.8): feat(pro): wire core to Pro licensing + branding hooks
|
||||||
|
|||||||
@@ -85,7 +85,15 @@ function updateHeaderLogoFromAdmin() {
|
|||||||
url = '/' + url;
|
url = '/' + url;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (url) {
|
// ---- Sanitize URL (mirror AdminModel::sanitizeLogoUrl) ----
|
||||||
|
const isHttp = /^https?:\/\//i.test(url);
|
||||||
|
const isSiteRelative = url.startsWith('/') && !url.includes('://');
|
||||||
|
|
||||||
|
// Strip any CR/LF just in case
|
||||||
|
url = url.replace(/[\r\n]+/g, '');
|
||||||
|
|
||||||
|
if (url && (isHttp || isSiteRelative)) {
|
||||||
|
// safe enough for <img src="...">
|
||||||
logoImg.setAttribute('src', url);
|
logoImg.setAttribute('src', url);
|
||||||
logoImg.setAttribute('alt', 'Site logo');
|
logoImg.setAttribute('alt', 'Site logo');
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
// generated by CI
|
// generated by CI
|
||||||
window.APP_VERSION = 'v1.9.8';
|
window.APP_VERSION = 'v1.9.9';
|
||||||
|
|||||||
Reference in New Issue
Block a user